xapian-fu 1.6.0 → 1.7.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.rdoc +5 -0
- data/README.rdoc +1 -1
- data/lib/xapian_fu/version.rb +1 -1
- data/lib/xapian_fu/xapian_db.rb +24 -0
- data/lib/xapian_fu/xapian_doc.rb +22 -0
- data/spec/xapian_db_spec.rb +21 -0
- data/spec/xapian_doc_spec.rb +34 -0
- metadata +18 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c5695db34da1fceed61e5dc6b5b8e997838e15b0bc50e3d3ff0991f8abeba0d
|
4
|
+
data.tar.gz: 3cb11fb4955a85a4ab55a09aa4d0575bb944effa9fd8c1f73ed068002d464c2d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35e471dee5c7cdf52f7370c692c7f15e5da5ad82d0899f243c5dcb9036081ba207fbcf8bd9e0d4b6a6e8f21ed709fe08fc9d058bd04b4c4fbece0773587f4501
|
7
|
+
data.tar.gz: 26b8d54f4cea15bef6580f9a9cf00f4aefd2fc4d1dd97e53d0b600fb72a6b301aa9a9bcbb7b35e0f83b328f928fe375cee05926198ef92e3d22b7fe6325e7ea2
|
data/CHANGELOG.rdoc
CHANGED
data/README.rdoc
CHANGED
@@ -20,7 +20,7 @@ Hash with full text indexing (and ACID transactions).
|
|
20
20
|
=== Xapian Bindings
|
21
21
|
|
22
22
|
Xapian Fu requires the Xapian Ruby bindings to be available. On
|
23
|
-
Debian/Ubuntu, you can install the `
|
23
|
+
Debian/Ubuntu, you can install the `ruby-xapian` package to get
|
24
24
|
them. Alternatively, you can install the `xapian-ruby` gem, which
|
25
25
|
reportedly will also provide them. You can also just get the
|
26
26
|
upstream Xapian release and manually install it.
|
data/lib/xapian_fu/version.rb
CHANGED
data/lib/xapian_fu/xapian_db.rb
CHANGED
@@ -38,6 +38,11 @@ module XapianFu #:nodoc:
|
|
38
38
|
# XapianDb to wipe the current on-disk database and start afresh.
|
39
39
|
# The default is <tt>false</tt>.
|
40
40
|
#
|
41
|
+
# Setting the <tt>:type</tt> option to either :glass or :chert will force that
|
42
|
+
# database backend, if supported. Leave as nil to auto-detect existing
|
43
|
+
# databases and create new databases with the library default (recommended).
|
44
|
+
# Requires xapian >=1.4
|
45
|
+
#
|
41
46
|
# db = XapianDb.new(:dir => '/tmp/mydb', :create => true)
|
42
47
|
#
|
43
48
|
# == Language, Stemmers and Stoppers
|
@@ -57,6 +62,10 @@ module XapianFu #:nodoc:
|
|
57
62
|
#
|
58
63
|
# db = XapianDb.new(:language => :italian, :stopper => false)
|
59
64
|
#
|
65
|
+
# The <tt>:stopper_strategy</tt> option specifies the default stop strategy
|
66
|
+
# that will be used when indexing and can be: <tt>:none</tt>, <tt>:all</tt> or
|
67
|
+
# <tt>:stemmed</tt>. Defaults to <tt>:stemmed</tt>
|
68
|
+
#
|
60
69
|
# == Spelling suggestions
|
61
70
|
#
|
62
71
|
# The <tt>:spelling</tt> option controls generation of a spelling
|
@@ -167,6 +176,8 @@ module XapianFu #:nodoc:
|
|
167
176
|
attr_reader :field_options
|
168
177
|
attr_accessor :weights_function
|
169
178
|
attr :field_weights
|
179
|
+
# The default stopper strategy
|
180
|
+
attr_accessor :stopper_strategy
|
170
181
|
|
171
182
|
def initialize( options = { } )
|
172
183
|
@options = { :index_positions => true, :spelling => true }.merge(options)
|
@@ -175,10 +186,23 @@ module XapianFu #:nodoc:
|
|
175
186
|
@db_flag = Xapian::DB_OPEN
|
176
187
|
@db_flag = Xapian::DB_CREATE_OR_OPEN if @options[:create]
|
177
188
|
@db_flag = Xapian::DB_CREATE_OR_OVERWRITE if @options[:overwrite]
|
189
|
+
case @options[:type]
|
190
|
+
when :glass
|
191
|
+
raise XapianFuError.new("type glass not recognised") unless defined?(Xapian::DB_BACKEND_GLASS)
|
192
|
+
@db_flag |= Xapian::DB_BACKEND_GLASS
|
193
|
+
when :chert
|
194
|
+
raise XapianFuError.new("type chert not recognised") unless defined?(Xapian::DB_BACKEND_CHERT)
|
195
|
+
@db_flag |= Xapian::DB_BACKEND_CHERT
|
196
|
+
when nil
|
197
|
+
# use library defaults
|
198
|
+
else
|
199
|
+
raise XapianFuError.new("type #{@options[:type].inspect} not recognised")
|
200
|
+
end
|
178
201
|
@tx_mutex = Mutex.new
|
179
202
|
@language = @options.fetch(:language, :english)
|
180
203
|
@stemmer = @options.fetch(:stemmer, @language)
|
181
204
|
@stopper = @options.fetch(:stopper, @language)
|
205
|
+
@stopper_strategy = @options.fetch(:stopper_strategy, :stemmed)
|
182
206
|
@field_options = {}
|
183
207
|
setup_fields(@options[:fields])
|
184
208
|
@store_values << @options[:store]
|
data/lib/xapian_fu/xapian_doc.rb
CHANGED
@@ -227,6 +227,27 @@ module XapianFu #:nodoc:
|
|
227
227
|
end
|
228
228
|
end
|
229
229
|
|
230
|
+
STOPPER_STRATEGIES = {
|
231
|
+
:none => 0,
|
232
|
+
:all => 1,
|
233
|
+
:stemmed => 2
|
234
|
+
}
|
235
|
+
|
236
|
+
def stopper_strategy
|
237
|
+
if @stopper_strategy
|
238
|
+
@stopper_strategy
|
239
|
+
else
|
240
|
+
@stopper_strategy =
|
241
|
+
if ! @options[:stopper_strategy].nil?
|
242
|
+
@options[:stopper_strategy]
|
243
|
+
elsif db
|
244
|
+
db.stopper_strategy
|
245
|
+
else
|
246
|
+
:stemmed
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
230
251
|
# Return this document's language which is set on initialize, inherited
|
231
252
|
# from the database or defaults to :english
|
232
253
|
def language
|
@@ -276,6 +297,7 @@ module XapianFu #:nodoc:
|
|
276
297
|
tg.document = xapian_document
|
277
298
|
tg.stopper = stopper if stopper
|
278
299
|
tg.stemmer = stemmer
|
300
|
+
tg.set_stopper_strategy(XapianDoc::STOPPER_STRATEGIES.fetch(stopper_strategy, 2))
|
279
301
|
tg.set_flags Xapian::TermGenerator::FLAG_SPELLING if db.spelling
|
280
302
|
index_method = db.index_positions ? :index_text : :index_text_without_positions
|
281
303
|
fields.each do |k,o|
|
data/spec/xapian_db_spec.rb
CHANGED
@@ -38,6 +38,27 @@ describe XapianDb do
|
|
38
38
|
File.exists?(tmp_dir).should be_true
|
39
39
|
end
|
40
40
|
|
41
|
+
it "should create a glass database when type is glass" do
|
42
|
+
pending "this version of xapian doesn't support glass" unless defined?(Xapian::DB_BACKEND_GLASS)
|
43
|
+
glassdir = tmp_dir + 'glass'
|
44
|
+
XapianDb.new(:dir => glassdir, :create => true, :type => :glass).rw
|
45
|
+
File.exists?(glassdir + '/iamglass').should == true
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should create a chert database when type is chert" do
|
49
|
+
pending "this version of xapian doesn't support chert" unless defined?(Xapian::DB_BACKEND_CHERT)
|
50
|
+
chertdir = tmp_dir + 'chert'
|
51
|
+
XapianDb.new(:dir => chertdir, :create => true, :type => :chert).rw
|
52
|
+
File.exists?(chertdir + '/iamchert').should == true
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should raise an exception when type is unrecognised" do
|
56
|
+
chertdir = tmp_dir + 'whatever'
|
57
|
+
lambda {
|
58
|
+
XapianDb.new(:dir => chertdir, :create => true, :type => :whatever).rw
|
59
|
+
}.should raise_error(XapianFu::XapianFuError)
|
60
|
+
end
|
61
|
+
|
41
62
|
it "should flush documents to the index when flush is called" do
|
42
63
|
xdb = XapianDb.new(:dir => tmp_dir, :create => true)
|
43
64
|
xdb.flush
|
data/spec/xapian_doc_spec.rb
CHANGED
@@ -261,4 +261,38 @@ describe XapianDoc do
|
|
261
261
|
end
|
262
262
|
end
|
263
263
|
|
264
|
+
describe "stopper_strategy" do
|
265
|
+
it "should stop all stop words when stopper_strategy is set to :all " do
|
266
|
+
xdb = XapianDb.new(:stopper_strategy => :all )
|
267
|
+
xdoc = xdb.documents.new("She fished for fish").to_xapian_document
|
268
|
+
terms = xdoc.terms.collect { |t| t.term }
|
269
|
+
terms.should_not include "for"
|
270
|
+
terms.should include "fish"
|
271
|
+
end
|
272
|
+
|
273
|
+
it "should stop stemmed words by when stopper_strategy is set to :stemmed " do
|
274
|
+
xdb = XapianDb.new(:stopper_strategy => :stemmed)
|
275
|
+
xdoc = xdb.documents.new("She fished for fish").to_xapian_document
|
276
|
+
terms = xdoc.terms.collect { |t| t.term }
|
277
|
+
terms.should_not include "Zfor"
|
278
|
+
terms.should include "fish"
|
279
|
+
end
|
280
|
+
|
281
|
+
it "should stop no words by when stopper_strategy is set to :none " do
|
282
|
+
xdb = XapianDb.new(:stopper_strategy => :none)
|
283
|
+
xdoc = xdb.documents.new("She fished for fish").to_xapian_document
|
284
|
+
terms = xdoc.terms.collect { |t| t.term }
|
285
|
+
terms.should include "Zfor"
|
286
|
+
terms.should include "for"
|
287
|
+
terms.should include "fish"
|
288
|
+
end
|
289
|
+
|
290
|
+
it "should stop stemmed words by default " do
|
291
|
+
xdb = XapianDb.new
|
292
|
+
xdoc = xdb.documents.new("She fished for fish").to_xapian_document
|
293
|
+
terms = xdoc.terms.collect { |t| t.term }
|
294
|
+
terms.should_not include "Zfor"
|
295
|
+
terms.should include "fish"
|
296
|
+
end
|
297
|
+
end
|
264
298
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xapian-fu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Leach
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-03-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -39,6 +39,20 @@ dependencies:
|
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: irb
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
42
56
|
- !ruby/object:Gem::Dependency
|
43
57
|
name: rdoc
|
44
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -171,7 +185,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
171
185
|
requirements:
|
172
186
|
- - ">="
|
173
187
|
- !ruby/object:Gem::Version
|
174
|
-
version: 1.
|
188
|
+
version: 2.1.0
|
175
189
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
176
190
|
requirements:
|
177
191
|
- - ">="
|
@@ -179,8 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
179
193
|
version: '0'
|
180
194
|
requirements:
|
181
195
|
- libxapian-dev, or the xapian-ruby gem
|
182
|
-
|
183
|
-
rubygems_version: 2.7.6.2
|
196
|
+
rubygems_version: 3.1.2
|
184
197
|
signing_key:
|
185
198
|
specification_version: 4
|
186
199
|
summary: A Ruby interface to the Xapian search engine
|