xapian_db 0.5.2 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
##0.5.3 (February 15th, 2011)
|
2
|
+
|
3
|
+
Fixes:
|
4
|
+
|
5
|
+
- index blueprints can now handle inheritance. If a class does not have its own index blueprint,
|
6
|
+
xapian_db uses the index blueprint from its super class (if defined)
|
7
|
+
- Added an ignore option to the blueprint definition to filter out objects that should not go into the index
|
8
|
+
|
9
|
+
##0.5.2 (January 11th, 2011)
|
10
|
+
|
11
|
+
Features:
|
12
|
+
|
13
|
+
- xapian-core and xapian-ruby-bindings sources are now included and will be compiled and installed with the gem
|
14
|
+
|
1
15
|
##0.5.1 (December 22th, 2010)
|
2
16
|
|
3
17
|
Features:
|
@@ -29,7 +43,7 @@ Changes:
|
|
29
43
|
|
30
44
|
Bugfixes:
|
31
45
|
|
32
|
-
- fixed the initialization error in a Rails app
|
46
|
+
- fixed the initialization error in a Rails app if there is no xapian_db.yml config file
|
33
47
|
- fixed the fallback to the global language when a model has an unsupported language and a
|
34
48
|
language method is configured in the blueprint
|
35
49
|
- fixed an issue with yaml deserialization of ActiveRecord objects (only the attributes hash
|
data/README.rdoc
CHANGED
@@ -28,33 +28,16 @@ So I started to rethink fulltext indexing again. I looked for something that
|
|
28
28
|
|
29
29
|
I tried hard but I couldn't find such a thing so I decided to write it, based on the Xapian library.
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
If you want to use xapian_db in a Rails app, you need Rails 3 or newer.
|
34
|
-
|
35
|
-
=== Install Xapian if not already installed
|
31
|
+
<b>If you found a bug or are looking for a missing feature, please post to the {Google Group}[http://groups.google.com/group/xapian_db]</b>
|
36
32
|
|
37
|
-
|
38
|
-
want to adjust the URLs below to load the most current release of Xapian.
|
39
|
-
The example code works for OSX. On linux you might want to use wget instead of curl.
|
33
|
+
== Requirements
|
40
34
|
|
41
|
-
|
35
|
+
* ruby 1.9.2 or better
|
36
|
+
* rails 3.0 or better (if you want to use it with rails)
|
42
37
|
|
43
|
-
|
44
|
-
curl -O http://oligarchy.co.uk/xapian/1.2.4/xapian-core-1.2.4.tar.gz
|
45
|
-
tar xzvf xapian-core-1.2.4.tar.gz
|
46
|
-
cd xapian-core-1.2.4
|
47
|
-
./configure --prefix=/usr/local
|
48
|
-
make
|
49
|
-
sudo make install
|
38
|
+
== Getting started
|
50
39
|
|
51
|
-
|
52
|
-
curl -O http://oligarchy.co.uk/xapian/1.2.2/xapian-bindings-1.2.4.tar.gz
|
53
|
-
tar xzvf xapian-bindings-1.2.4.tar.gz
|
54
|
-
cd xapian-bindings-1.2.4
|
55
|
-
./configure --prefix=/usr/local XAPIAN_CONFIG=/usr/local/bin/xapian-config
|
56
|
-
make
|
57
|
-
sudo make install
|
40
|
+
If you want to use xapian_db in a Rails app, you need Rails 3 or newer.
|
58
41
|
|
59
42
|
For a first look, look at the examples in the examples folder. There's the simple ruby script basic.rb that shows the basic
|
60
43
|
usage of XapianDB without rails. In the basic_rails folder you'll find a very simple Rails app unsing XapianDb.
|
@@ -123,6 +106,14 @@ Use blocks for complex evaluations of attributes or indexed values:
|
|
123
106
|
end
|
124
107
|
end
|
125
108
|
|
109
|
+
You may add a filter expression to exclude objects from the index. This is handy to skip objects that are not active, for example:
|
110
|
+
|
111
|
+
XapianDb::DocumentBlueprint.setup(Person) do |blueprint|
|
112
|
+
blueprint.attributes :name, :first_name, :profession
|
113
|
+
blueprint.index :notes, :remarks, :cv
|
114
|
+
blueprint.ignore_if {active == false}
|
115
|
+
end
|
116
|
+
|
126
117
|
place these configurations either into the corresponding class or - I prefer to have the index configurations outside
|
127
118
|
the models - into the file config/xapian_blueprints.rb.
|
128
119
|
|
@@ -267,7 +258,7 @@ The easiest way is to use macports or homebrew:
|
|
267
258
|
|
268
259
|
=== 4. start the beanstalk daemon
|
269
260
|
|
270
|
-
|
261
|
+
beanstalkd -d
|
271
262
|
|
272
263
|
=== 5. start the beanstalk worker from within your Rails app root directory
|
273
264
|
|
@@ -39,7 +39,12 @@ module XapianDb
|
|
39
39
|
|
40
40
|
# add the after save logic
|
41
41
|
after_save do
|
42
|
-
XapianDb::
|
42
|
+
blueprint = XapianDb::DocumentBlueprint.blueprint_for klass
|
43
|
+
if blueprint.should_index?(self)
|
44
|
+
XapianDb::Config.writer.index(self)
|
45
|
+
else
|
46
|
+
XapianDb::Config.writer.unindex(self)
|
47
|
+
end
|
43
48
|
end
|
44
49
|
|
45
50
|
# add the after destroy logic
|
@@ -38,7 +38,12 @@ module XapianDb
|
|
38
38
|
|
39
39
|
# add the after save logic
|
40
40
|
after :save do
|
41
|
-
XapianDb::
|
41
|
+
blueprint = XapianDb::DocumentBlueprint.blueprint_for klass
|
42
|
+
if blueprint.should_index?(self)
|
43
|
+
XapianDb::Config.writer.index(self)
|
44
|
+
else
|
45
|
+
XapianDb::Config.writer.unindex(self)
|
46
|
+
end
|
42
47
|
end
|
43
48
|
|
44
49
|
# add the after destroy logic
|
@@ -32,7 +32,6 @@ module XapianDb
|
|
32
32
|
|
33
33
|
# Configure the blueprint for a class.
|
34
34
|
# Available options:
|
35
|
-
# - language_method (see {#language_method} for details)
|
36
35
|
# - adapter (see {#adapter} for details)
|
37
36
|
# - attribute (see {#attribute} for details)
|
38
37
|
# - index (see {#index} for details)
|
@@ -49,7 +48,15 @@ module XapianDb
|
|
49
48
|
# Get the blueprint for a class
|
50
49
|
# @return [DocumentBlueprint]
|
51
50
|
def blueprint_for(klass)
|
52
|
-
|
51
|
+
if @blueprints
|
52
|
+
key = klass
|
53
|
+
while key != Object
|
54
|
+
return @blueprints[key] unless @blueprints[key].nil?
|
55
|
+
key = key.superclass
|
56
|
+
end
|
57
|
+
raise "Blueprint for class #{klass} is not defined"
|
58
|
+
end
|
59
|
+
raise "Blueprint for class #{klass} is not defined"
|
53
60
|
end
|
54
61
|
|
55
62
|
# Return an array of all configured text methods in any blueprint
|
@@ -116,6 +123,13 @@ module XapianDb
|
|
116
123
|
@prefixes ||= @indexed_methods_hash.keys
|
117
124
|
end
|
118
125
|
|
126
|
+
# Should the object go into the index? Evaluates an ignore expression,
|
127
|
+
# if defined
|
128
|
+
def should_index? obj
|
129
|
+
return obj.instance_eval(&@ignore_expression) == false if @ignore_expression
|
130
|
+
true
|
131
|
+
end
|
132
|
+
|
119
133
|
# Lazily build and return a module that implements accessors for each field
|
120
134
|
# @return [Module] A module containing all accessor methods
|
121
135
|
def accessors_module
|
@@ -236,6 +250,11 @@ module XapianDb
|
|
236
250
|
end
|
237
251
|
end
|
238
252
|
|
253
|
+
# Add a block of code that evaluates if a model should not be indexed
|
254
|
+
def ignore_if &block
|
255
|
+
@ignore_expression = block
|
256
|
+
end
|
257
|
+
|
239
258
|
# Options for an indexed method
|
240
259
|
class IndexOptions
|
241
260
|
|
@@ -55,8 +55,12 @@ module XapianDb
|
|
55
55
|
nr_of_batches = (obj_count / 1000) + 1
|
56
56
|
nr_of_batches.times do |batch|
|
57
57
|
klass.all(:offset => batch * 1000, :limit => 1000) .each do |obj|
|
58
|
-
|
59
|
-
|
58
|
+
if blueprint.should_index? obj
|
59
|
+
doc = indexer.build_document_for(obj)
|
60
|
+
XapianDb.database.store_doc(doc)
|
61
|
+
else
|
62
|
+
XapianDb.database.delete_doc_with_unique_term(obj.xapian_id)
|
63
|
+
end
|
60
64
|
pbar.inc if show_progressbar
|
61
65
|
end
|
62
66
|
end
|
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xapian_db
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 5
|
8
|
-
- 2
|
9
|
-
version: 0.5.2
|
4
|
+
prerelease:
|
5
|
+
version: 0.5.3
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Gernot Kogler
|
@@ -14,7 +10,7 @@ autorequire:
|
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date: 2011-
|
13
|
+
date: 2011-02-15 00:00:00 +01:00
|
18
14
|
default_executable:
|
19
15
|
dependencies:
|
20
16
|
- !ruby/object:Gem::Dependency
|
@@ -25,10 +21,6 @@ dependencies:
|
|
25
21
|
requirements:
|
26
22
|
- - ">="
|
27
23
|
- !ruby/object:Gem::Version
|
28
|
-
segments:
|
29
|
-
- 2
|
30
|
-
- 3
|
31
|
-
- 1
|
32
24
|
version: 2.3.1
|
33
25
|
type: :development
|
34
26
|
version_requirements: *id001
|
@@ -40,10 +32,6 @@ dependencies:
|
|
40
32
|
requirements:
|
41
33
|
- - ">="
|
42
34
|
- !ruby/object:Gem::Version
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
- 3
|
46
|
-
- 7
|
47
35
|
version: 0.3.7
|
48
36
|
type: :development
|
49
37
|
version_requirements: *id002
|
@@ -55,10 +43,6 @@ dependencies:
|
|
55
43
|
requirements:
|
56
44
|
- - ">="
|
57
45
|
- !ruby/object:Gem::Version
|
58
|
-
segments:
|
59
|
-
- 1
|
60
|
-
- 1
|
61
|
-
- 0
|
62
46
|
version: 1.1.0
|
63
47
|
type: :development
|
64
48
|
version_requirements: *id003
|
@@ -129,23 +113,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
129
113
|
requirements:
|
130
114
|
- - ">="
|
131
115
|
- !ruby/object:Gem::Version
|
132
|
-
segments:
|
133
|
-
- 0
|
134
116
|
version: "0"
|
135
117
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
118
|
none: false
|
137
119
|
requirements:
|
138
120
|
- - ">="
|
139
121
|
- !ruby/object:Gem::Version
|
140
|
-
segments:
|
141
|
-
- 1
|
142
|
-
- 3
|
143
|
-
- 6
|
144
122
|
version: 1.3.6
|
145
123
|
requirements: []
|
146
124
|
|
147
125
|
rubyforge_project:
|
148
|
-
rubygems_version: 1.
|
126
|
+
rubygems_version: 1.5.2
|
149
127
|
signing_key:
|
150
128
|
specification_version: 3
|
151
129
|
summary: Ruby library to use a Xapian db as a key/value store with high performance fulltext search
|