xapian_db 1.2.4.5 → 1.2.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +7 -0
- data/lib/xapian_db/database.rb +16 -1
- data/lib/xapian_db/document_blueprint.rb +25 -16
- data/lib/xapian_db/index_writers/direct_writer.rb +2 -2
- data/lib/xapian_db.rb +1 -0
- metadata +20 -4
data/CHANGELOG.md
CHANGED
data/lib/xapian_db/database.rb
CHANGED
@@ -165,6 +165,12 @@ module XapianDb
|
|
165
165
|
# Nothing to do for an in memory database
|
166
166
|
end
|
167
167
|
|
168
|
+
# Reset (empty) the database
|
169
|
+
def reset
|
170
|
+
@writer = Xapian::inmemory_open
|
171
|
+
@reader = @writer
|
172
|
+
end
|
173
|
+
|
168
174
|
end
|
169
175
|
|
170
176
|
# Persistent database on disk
|
@@ -212,6 +218,15 @@ module XapianDb
|
|
212
218
|
writer.commit
|
213
219
|
end
|
214
220
|
|
221
|
+
# Reset (empty) the database
|
222
|
+
def reset
|
223
|
+
# We must release the writer and run the garbage collector to remove the write lock
|
224
|
+
@writer = nil
|
225
|
+
GC.start
|
226
|
+
@writer = Xapian::WritableDatabase.new(@path, Xapian::DB_CREATE_OR_OVERWRITE)
|
227
|
+
@reader = Xapian::Database.new(@path)
|
228
|
+
end
|
229
|
+
|
215
230
|
end
|
216
231
|
|
217
|
-
end
|
232
|
+
end
|
@@ -32,12 +32,8 @@ module XapianDb
|
|
32
32
|
# - attribute (see {#attribute} for details)
|
33
33
|
# - index (see {#index} for details)
|
34
34
|
def setup(klass_or_name, &block)
|
35
|
-
|
36
|
-
|
37
|
-
name = klass_or_name.name
|
38
|
-
else
|
39
|
-
name = klass_or_name.to_s
|
40
|
-
end
|
35
|
+
name = class_name_from klass_or_name
|
36
|
+
|
41
37
|
@blueprints ||= {}
|
42
38
|
blueprint = DocumentBlueprint.new
|
43
39
|
yield blueprint if block_given? # configure the blueprint through the block
|
@@ -47,16 +43,7 @@ module XapianDb
|
|
47
43
|
@blueprints.delete_if { |indexed_class, blueprint| indexed_class == name }
|
48
44
|
@blueprints[name] = blueprint
|
49
45
|
|
50
|
-
|
51
|
-
unless defined? blueprint._adapter
|
52
|
-
adapter_file = blueprint._adapter.name.split("::").last.downcase + "_adapter"
|
53
|
-
require File.dirname(__FILE__) + "../adapters/#{adapter_file}"
|
54
|
-
end
|
55
|
-
|
56
|
-
# Needed to add class helper methods to indexed pure ruby classes
|
57
|
-
if eval("defined?(#{name}) && #{name}.is_a?(Class)")
|
58
|
-
blueprint._adapter.add_class_helper_methods_to XapianDb::Utilities.constantize(name)
|
59
|
-
end
|
46
|
+
lazy_load_adapter_for blueprint, name
|
60
47
|
|
61
48
|
@searchable_prefixes = @blueprints.values.map { |blueprint| blueprint.searchable_prefixes }.flatten.compact.uniq || []
|
62
49
|
|
@@ -146,6 +133,28 @@ module XapianDb
|
|
146
133
|
|
147
134
|
private
|
148
135
|
|
136
|
+
def class_name_from(klass_or_name)
|
137
|
+
if klass_or_name.is_a?(Class)
|
138
|
+
warn "xapian_db: XapianDb::DocumentBlueprint.setup(Class) is deprecated; use XapianDb::DocumentBlueprint.setup(Symbol) or XapianDb::DocumentBlueprint.setup(String) instead"
|
139
|
+
name = klass_or_name.name
|
140
|
+
else
|
141
|
+
name = klass_or_name.to_s
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def lazy_load_adapter_for(blueprint, klass_name)
|
146
|
+
# lazy load the adapter
|
147
|
+
unless defined? blueprint._adapter
|
148
|
+
adapter_file = blueprint._adapter.name.split("::").last.downcase + "_adapter"
|
149
|
+
require File.dirname(__FILE__) + "../adapters/#{adapter_file}"
|
150
|
+
end
|
151
|
+
|
152
|
+
# Needed to add class helper methods to indexed pure ruby classes
|
153
|
+
if eval("defined?(#{klass_name}) && #{klass_name}.is_a?(Class)")
|
154
|
+
blueprint._adapter.add_class_helper_methods_to XapianDb::Utilities.constantize(klass_name)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
149
158
|
def validate_type_consistency_on(blueprint)
|
150
159
|
blueprint.type_map.each do |method_name, type|
|
151
160
|
if type_info_for(method_name) && type_info_for(method_name) != type
|
@@ -64,7 +64,7 @@ module XapianDb
|
|
64
64
|
if opts[:verbose]
|
65
65
|
show_progressbar = defined?(ProgressBar)
|
66
66
|
puts "reindexing #{obj_count} objects of #{klass}..."
|
67
|
-
pbar = ProgressBar.
|
67
|
+
pbar = ProgressBar.create(:title => "Status", :total => obj_count, :format => ' %t %e %B %p%%') if show_progressbar
|
68
68
|
end
|
69
69
|
|
70
70
|
# Process the objects in batches to reduce the memory footprint
|
@@ -72,7 +72,7 @@ module XapianDb
|
|
72
72
|
nr_of_batches.times do |batch|
|
73
73
|
base_query.all(:offset => batch * BATCH_SIZE, :limit => BATCH_SIZE, :order => klass.order_condition(primary_key)).each do |obj|
|
74
74
|
reindex obj, false
|
75
|
-
pbar.
|
75
|
+
pbar.increment if show_progressbar
|
76
76
|
end
|
77
77
|
end
|
78
78
|
XapianDb.database.commit
|
data/lib/xapian_db.rb
CHANGED
@@ -142,6 +142,7 @@ module XapianDb
|
|
142
142
|
# @option options [Boolean] :verbose (false) Should the reindexing give status informations?
|
143
143
|
# @return [Boolean] Did we reindex anything?
|
144
144
|
def self.rebuild_xapian_index(options={})
|
145
|
+
database.reset
|
145
146
|
configured_classes = XapianDb::DocumentBlueprint.configured_classes
|
146
147
|
return false unless configured_classes.size > 0
|
147
148
|
configured_classes.each do |klass|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xapian_db
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.4.
|
4
|
+
version: 1.2.4.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: daemons
|
@@ -108,7 +108,7 @@ dependencies:
|
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '0'
|
110
110
|
- !ruby/object:Gem::Dependency
|
111
|
-
name: progressbar
|
111
|
+
name: ruby-progressbar
|
112
112
|
requirement: !ruby/object:Gem::Requirement
|
113
113
|
none: false
|
114
114
|
requirements:
|
@@ -155,6 +155,22 @@ dependencies:
|
|
155
155
|
- - ! '>='
|
156
156
|
- !ruby/object:Gem::Version
|
157
157
|
version: 1.2.7.1
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: pry-rails
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
type: :development
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
158
174
|
description: XapianDb is a ruby gem that combines features of nosql databases and
|
159
175
|
fulltext indexing. It is based on Xapian, an efficient and powerful indexing library
|
160
176
|
email: gernot.kogler (at) garaio (dot) com
|
@@ -230,7 +246,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
230
246
|
version: '0'
|
231
247
|
segments:
|
232
248
|
- 0
|
233
|
-
hash:
|
249
|
+
hash: 2931539374051915858
|
234
250
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
235
251
|
none: false
|
236
252
|
requirements:
|