lunr 2.0.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +8 -0
- data/Isolate +1 -1
- data/README.rdoc +91 -1
- data/Rakefile +2 -0
- data/lib/lunr.rb +1 -1
- data/lib/lunr/model/klass.rb +4 -0
- metadata +9 -7
data/CHANGELOG.rdoc
CHANGED
data/Isolate
CHANGED
data/README.rdoc
CHANGED
@@ -14,7 +14,7 @@ If you have complex indexes with a stored fields and need to search /
|
|
14
14
|
access those fields without access to the original data store, Lunr
|
15
15
|
might be what you're looking for.
|
16
16
|
|
17
|
-
==
|
17
|
+
== A Lunr Model
|
18
18
|
|
19
19
|
require "lunr"
|
20
20
|
|
@@ -47,10 +47,100 @@ might be what you're looking for.
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
+
=== Including the Module
|
51
|
+
|
52
|
+
All model class must <code>include Lunr::Model</code>.
|
53
|
+
|
54
|
+
=== Define the Search Index
|
55
|
+
|
56
|
+
Time to tell Solr what this class searches, and which fields are
|
57
|
+
properties. The DSL in here is exactly the same as Sunspot's, with the
|
58
|
+
addition of a <code>property</code> method. Calling
|
59
|
+
<code>property</code> tells Lunr that you expect access to this field,
|
60
|
+
generates an <code>attr_reader</code> and passes it along to Sunspot's
|
61
|
+
DSL as <code>:stored => true</code>.
|
62
|
+
|
63
|
+
searches "Track" do
|
64
|
+
property :album, :text
|
65
|
+
property :artist, :text
|
66
|
+
property :title, :text
|
67
|
+
|
68
|
+
time :accepted_at
|
69
|
+
boolean :hot
|
70
|
+
string :state
|
71
|
+
end
|
72
|
+
|
73
|
+
The <code>searches</code> method also takes an optional type name,
|
74
|
+
which can be used to map Lunr model types to differing search
|
75
|
+
results. In this case, <code>My::SimpleTrack</code> will search
|
76
|
+
documents with an original type of <code>Track</code>.
|
77
|
+
|
78
|
+
List every criteria you might want to search by, but omit any of
|
79
|
+
Sunspot's DSL that involves indexing.
|
80
|
+
|
81
|
+
=== Default Scope
|
82
|
+
|
83
|
+
Call <code>scope</code> with no name to set default filtering,
|
84
|
+
ordering, and pagination properties.
|
85
|
+
|
86
|
+
scope do |q|
|
87
|
+
q.order_by :hot, :desc
|
88
|
+
q.order_by :accepted_at, :desc
|
89
|
+
|
90
|
+
q.with :state, "accepted"
|
91
|
+
end
|
92
|
+
|
93
|
+
=== Named Scopes
|
94
|
+
|
95
|
+
You can define any number of named scopes to make searching
|
96
|
+
simpler. They're made availble as static methods on the model class,
|
97
|
+
and they're chainable when searching. See the "Searching" section
|
98
|
+
below.
|
99
|
+
|
100
|
+
scope :hot do
|
101
|
+
with :hot, true
|
102
|
+
end
|
103
|
+
|
104
|
+
Scope blocks without parameters are <code>instance_eval</code>ed in
|
105
|
+
the Sunspot query DSL's context. If your scope takes parameters, the
|
106
|
+
first param must be the Sunspot query object.
|
107
|
+
|
108
|
+
scope :state do |q, state|
|
109
|
+
q.with :state, state
|
110
|
+
end
|
111
|
+
|
112
|
+
== Searching
|
113
|
+
|
114
|
+
My::SimpleTrack.search
|
115
|
+
My::SimpleTrack.all # same thing
|
116
|
+
|
117
|
+
All searches return a <code>Lunr::Search</code> object, and searches
|
118
|
+
can be narrowed using the Sunspot query DSL or named scopes. Searches
|
119
|
+
aren't run until an <code>Enumerable</code>, arraylike, or pagination
|
120
|
+
method is called on the search object. For convenience,
|
121
|
+
<code>Lunr::Search</code> quacks like
|
122
|
+
<code>WillPaginate::Collection</code>.
|
123
|
+
|
124
|
+
search = My::SimpleTrack.hot.scope { |q| q.fulltext "hello" }
|
125
|
+
p :page => search.page, :total => search.total
|
126
|
+
|
127
|
+
search.each do |track|
|
128
|
+
puts "#{track.title} by #{track.artist} on #{track.album}."
|
129
|
+
end
|
130
|
+
|
50
131
|
== Installation
|
51
132
|
|
52
133
|
$ gem install lunr
|
53
134
|
|
135
|
+
== Development
|
136
|
+
|
137
|
+
Version number notwithstanding, Lunr is under pretty heavy
|
138
|
+
development. It's missing a lot of tests, and will be in flux a
|
139
|
+
bit. Contributions and suggestions are very welcome.
|
140
|
+
|
141
|
+
Install the <code>isolate</code> gem and run <code>rake</code>. All
|
142
|
+
dev dependencies will be installed automatically.
|
143
|
+
|
54
144
|
== License
|
55
145
|
|
56
146
|
Copyright 2010 John Barnette (code@jbarnette.com)
|
data/Rakefile
CHANGED
@@ -11,6 +11,8 @@ Hoe.plugin :doofus, :git, :isolate
|
|
11
11
|
Hoe.spec "lunr" do
|
12
12
|
developer "John Barnette", "code@jbarnette.com"
|
13
13
|
|
14
|
+
require_ruby_version ">= 1.8.7"
|
15
|
+
|
14
16
|
self.extra_rdoc_files = Dir["*.rdoc"]
|
15
17
|
self.history_file = "CHANGELOG.rdoc"
|
16
18
|
self.readme_file = "README.rdoc"
|
data/lib/lunr.rb
CHANGED
data/lib/lunr/model/klass.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lunr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 2.0.
|
9
|
+
- 2
|
10
|
+
version: 2.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- John Barnette
|
@@ -24,7 +24,7 @@ dependencies:
|
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - "="
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
hash: 19
|
30
30
|
segments:
|
@@ -213,10 +213,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
213
213
|
requirements:
|
214
214
|
- - ">="
|
215
215
|
- !ruby/object:Gem::Version
|
216
|
-
hash:
|
216
|
+
hash: 57
|
217
217
|
segments:
|
218
|
-
-
|
219
|
-
|
218
|
+
- 1
|
219
|
+
- 8
|
220
|
+
- 7
|
221
|
+
version: 1.8.7
|
220
222
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
221
223
|
none: false
|
222
224
|
requirements:
|