outoftime-sunspot_rails 0.9.12 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +3 -3
- data/VERSION.yml +2 -2
- data/lib/sunspot/rails/searchable.rb +32 -11
- data/spec/model_spec.rb +91 -2
- metadata +2 -2
data/README.rdoc
CHANGED
@@ -236,9 +236,9 @@ http://outoftime.lighthouseapp.com/projects/20339-sunspot
|
|
236
236
|
|
237
237
|
== Contributors
|
238
238
|
|
239
|
-
Mat Brown (mat@patch.com)
|
240
|
-
Peer Allan (peer.allan@gmail.com)
|
241
|
-
Michael Moen (michael@underpantsgnome.com)
|
239
|
+
- Mat Brown (mat@patch.com)
|
240
|
+
- Peer Allan (peer.allan@gmail.com)
|
241
|
+
- Michael Moen (michael@underpantsgnome.com)
|
242
242
|
|
243
243
|
== License
|
244
244
|
|
data/VERSION.yml
CHANGED
@@ -147,32 +147,53 @@ module Sunspot #:nodoc:
|
|
147
147
|
# database at a time. The default batch size is 500; if nil is passed,
|
148
148
|
# records will not be indexed in batches. By default, a commit is issued
|
149
149
|
# after each batch; passing +false+ for +batch_commit+ will disable
|
150
|
-
# this, and only issue a commit at the end of the process.
|
150
|
+
# this, and only issue a commit at the end of the process. If associated
|
151
|
+
# objects need to indexed also, you can specify +include+ in format
|
152
|
+
# accepted by ActiveRecord to improve your sql select performance
|
151
153
|
#
|
152
|
-
# ====
|
154
|
+
# ==== Options (passed as a hash)
|
153
155
|
#
|
154
156
|
# batch_size<Integer>:: Batch size with which to load records. Passing
|
155
157
|
# 'nil' will skip batches. Default is 500.
|
156
|
-
# batch_commit<Boolean>:: Flag
|
158
|
+
# batch_commit<Boolean>:: Flag signalling if a commit should be done after
|
157
159
|
# after each batch is indexed, default is 'true'
|
160
|
+
# include<Mixed>:: include option to be passed to the ActiveRecord find,
|
161
|
+
# used for including associated objects that need to be
|
162
|
+
# indexed with the parent object, accepts all formats
|
163
|
+
# ActiveRecord::Base.find does
|
158
164
|
#
|
159
|
-
|
165
|
+
# ==== Examples
|
166
|
+
#
|
167
|
+
# # reindex in batches of 500, commit after each
|
168
|
+
# Post.reindex
|
169
|
+
#
|
170
|
+
# # index all rows at once, then commit
|
171
|
+
# Post.reindex(:batch_size => nil)
|
172
|
+
#
|
173
|
+
# # reindex in batches of 500, commit when all batches complete
|
174
|
+
# Post.reindex(:batch_commit => false)
|
175
|
+
#
|
176
|
+
# # include the associated +author+ object when loading to index
|
177
|
+
# Post.reindex(:include => :author)
|
178
|
+
#
|
179
|
+
def reindex(opts={})
|
180
|
+
options = { :batch_size => 500, :batch_commit => true, :include => []}.merge(opts)
|
160
181
|
remove_all_from_index
|
161
|
-
unless batch_size
|
162
|
-
Sunspot.index!(all)
|
182
|
+
unless options[:batch_size]
|
183
|
+
Sunspot.index!(all(:include => options[:include]))
|
163
184
|
else
|
164
185
|
record_count = count(:order => primary_key)
|
165
186
|
counter = 1
|
166
187
|
offset = 0
|
167
188
|
while(offset < record_count)
|
168
|
-
benchmark batch_size, counter do
|
169
|
-
Sunspot.index(all(:offset => offset, :limit => batch_size, :order => primary_key))
|
189
|
+
benchmark options[:batch_size], counter do
|
190
|
+
Sunspot.index(all(:include => options[:include], :offset => offset, :limit => options[:batch_size], :order => primary_key))
|
170
191
|
end
|
171
|
-
Sunspot.commit if batch_commit
|
172
|
-
offset += batch_size
|
192
|
+
Sunspot.commit if options[:batch_commit]
|
193
|
+
offset += options[:batch_size]
|
173
194
|
counter += 1
|
174
195
|
end
|
175
|
-
Sunspot.commit unless batch_commit
|
196
|
+
Sunspot.commit unless options[:batch_commit]
|
176
197
|
end
|
177
198
|
end
|
178
199
|
|
data/spec/model_spec.rb
CHANGED
@@ -158,10 +158,32 @@ describe 'ActiveRecord mixin' do
|
|
158
158
|
end
|
159
159
|
|
160
160
|
it 'should index all instances' do
|
161
|
+
Post.reindex(:batch_size => nil)
|
162
|
+
Sunspot.commit
|
163
|
+
Post.search.results.to_set.should == @posts.to_set
|
164
|
+
end
|
165
|
+
|
166
|
+
it 'should remove all currently indexed instances' do
|
167
|
+
old_post = Post.create!
|
168
|
+
old_post.index!
|
169
|
+
old_post.destroy
|
161
170
|
Post.reindex
|
162
171
|
Sunspot.commit
|
163
172
|
Post.search.results.to_set.should == @posts.to_set
|
164
173
|
end
|
174
|
+
|
175
|
+
end
|
176
|
+
|
177
|
+
describe 'reindex() with real data' do
|
178
|
+
before :each do
|
179
|
+
@posts = Array.new(2) { Post.create }
|
180
|
+
end
|
181
|
+
|
182
|
+
it 'should index all instances' do
|
183
|
+
Post.reindex(:batch_size => nil)
|
184
|
+
Sunspot.commit
|
185
|
+
Post.search.results.to_set.should == @posts.to_set
|
186
|
+
end
|
165
187
|
|
166
188
|
it 'should remove all currently indexed instances' do
|
167
189
|
old_post = Post.create!
|
@@ -173,11 +195,78 @@ describe 'ActiveRecord mixin' do
|
|
173
195
|
end
|
174
196
|
|
175
197
|
describe "using batch sizes" do
|
176
|
-
it 'should index with a batch size' do
|
177
|
-
Post.reindex(1)
|
198
|
+
it 'should index with a specified batch size' do
|
199
|
+
Post.reindex(:batch_size => 1)
|
178
200
|
Sunspot.commit
|
179
201
|
Post.search.results.to_set.should == @posts.to_set
|
180
202
|
end
|
181
203
|
end
|
204
|
+
|
182
205
|
end
|
206
|
+
|
207
|
+
describe "reindex()" do
|
208
|
+
|
209
|
+
before(:each) do
|
210
|
+
@posts = Array.new(10) { Post.create }
|
211
|
+
end
|
212
|
+
|
213
|
+
describe "when not using batches" do
|
214
|
+
|
215
|
+
it "should select all if the batch_size is nil" do
|
216
|
+
Post.should_receive(:all).with(:include => []).and_return([])
|
217
|
+
Post.reindex(:batch_size => nil)
|
218
|
+
end
|
219
|
+
|
220
|
+
it "should search for models with includes" do
|
221
|
+
Post.should_receive(:all).with(:include => :author).and_return([])
|
222
|
+
Post.reindex(:batch_size => nil, :include => :author)
|
223
|
+
end
|
224
|
+
|
225
|
+
end
|
226
|
+
|
227
|
+
describe "when using batches" do
|
228
|
+
|
229
|
+
it "should use the default options" do
|
230
|
+
Post.should_receive(:all).with do |params|
|
231
|
+
params[:limit].should == 500
|
232
|
+
params[:include].should == []
|
233
|
+
end.and_return(@posts)
|
234
|
+
Post.reindex
|
235
|
+
end
|
236
|
+
|
237
|
+
it "should count the number of records to index" do
|
238
|
+
Post.should_receive(:count).and_return(10)
|
239
|
+
Post.reindex
|
240
|
+
end
|
241
|
+
|
242
|
+
it "should override the batch_size" do
|
243
|
+
Post.should_receive(:all).with do |params|
|
244
|
+
params[:limit].should == 20
|
245
|
+
@posts
|
246
|
+
end.and_return(@posts)
|
247
|
+
Post.reindex(:batch_size => 20)
|
248
|
+
end
|
249
|
+
|
250
|
+
it "should set the include option" do
|
251
|
+
Post.should_receive(:all).with do |params|
|
252
|
+
params[:include].should == [{:author => :address}]
|
253
|
+
@posts
|
254
|
+
end.and_return(@posts)
|
255
|
+
Post.reindex(:include => [{:author => :address}])
|
256
|
+
end
|
257
|
+
|
258
|
+
it "should commit after indexing each batch" do
|
259
|
+
Sunspot.should_receive(:commit).twice
|
260
|
+
Post.reindex(:batch_size => 5)
|
261
|
+
end
|
262
|
+
|
263
|
+
it "should commit after indexing everything" do
|
264
|
+
Sunspot.should_receive(:commit).once
|
265
|
+
Post.reindex(:batch_commit => false)
|
266
|
+
end
|
267
|
+
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
|
183
272
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: outoftime-sunspot_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mat Brown
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-06-
|
12
|
+
date: 2009-06-05 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|