sunspot 2.2.7 → 2.2.8
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/.gitignore +1 -0
- data/.rspec +2 -0
- data/Appraisals +7 -0
- data/Gemfile +0 -8
- data/gemfiles/.gitkeep +0 -0
- data/lib/sunspot/dsl/scope.rb +6 -1
- data/lib/sunspot/field.rb +11 -0
- data/lib/sunspot/field_factory.rb +6 -2
- data/lib/sunspot/query/bbox.rb +5 -1
- data/lib/sunspot/query/restriction.rb +11 -0
- data/lib/sunspot/search/hit_enumerable.rb +4 -1
- data/lib/sunspot/search/standard_search.rb +2 -3
- data/lib/sunspot/version.rb +1 -1
- data/spec/api/adapters_spec.rb +19 -19
- data/spec/api/batcher_spec.rb +15 -15
- data/spec/api/binding_spec.rb +3 -3
- data/spec/api/class_set_spec.rb +3 -3
- data/spec/api/hit_enumerable_spec.rb +32 -9
- data/spec/api/indexer/attributes_spec.rb +31 -31
- data/spec/api/indexer/batch_spec.rb +8 -7
- data/spec/api/indexer/dynamic_fields_spec.rb +8 -8
- data/spec/api/indexer/fixed_fields_spec.rb +12 -12
- data/spec/api/indexer/fulltext_spec.rb +8 -8
- data/spec/api/indexer/removal_spec.rb +14 -14
- data/spec/api/indexer_spec.rb +2 -2
- data/spec/api/query/advanced_manipulation_examples.rb +3 -3
- data/spec/api/query/connectives_examples.rb +26 -14
- data/spec/api/query/dsl_spec.rb +17 -9
- data/spec/api/query/dynamic_fields_examples.rb +18 -18
- data/spec/api/query/faceting_examples.rb +62 -62
- data/spec/api/query/fulltext_examples.rb +56 -55
- data/spec/api/query/function_spec.rb +26 -26
- data/spec/api/query/geo_examples.rb +6 -6
- data/spec/api/query/group_spec.rb +6 -6
- data/spec/api/query/highlighting_examples.rb +26 -26
- data/spec/api/query/join_spec.rb +2 -2
- data/spec/api/query/more_like_this_spec.rb +29 -29
- data/spec/api/query/ordering_pagination_examples.rb +25 -25
- data/spec/api/query/scope_examples.rb +39 -39
- data/spec/api/query/spatial_examples.rb +3 -3
- data/spec/api/query/spellcheck_examples.rb +3 -3
- data/spec/api/query/standard_spec.rb +1 -1
- data/spec/api/query/stats_examples.rb +8 -8
- data/spec/api/query/text_field_scoping_examples.rb +5 -5
- data/spec/api/query/types_spec.rb +4 -4
- data/spec/api/search/cursor_paginated_collection_spec.rb +12 -12
- data/spec/api/search/dynamic_fields_spec.rb +4 -4
- data/spec/api/search/faceting_spec.rb +55 -52
- data/spec/api/search/highlighting_spec.rb +7 -7
- data/spec/api/search/hits_spec.rb +29 -29
- data/spec/api/search/paginated_collection_spec.rb +18 -18
- data/spec/api/search/results_spec.rb +13 -13
- data/spec/api/search/search_spec.rb +3 -3
- data/spec/api/search/stats_spec.rb +10 -10
- data/spec/api/session_proxy/class_sharding_session_proxy_spec.rb +19 -18
- data/spec/api/session_proxy/id_sharding_session_proxy_spec.rb +9 -9
- data/spec/api/session_proxy/master_slave_session_proxy_spec.rb +10 -6
- data/spec/api/session_proxy/retry_5xx_session_proxy_spec.rb +10 -10
- data/spec/api/session_proxy/sharding_session_proxy_spec.rb +14 -13
- data/spec/api/session_proxy/silent_fail_session_proxy_spec.rb +2 -2
- data/spec/api/session_proxy/spec_helper.rb +1 -1
- data/spec/api/session_proxy/thread_local_session_proxy_spec.rb +9 -5
- data/spec/api/session_spec.rb +42 -42
- data/spec/api/sunspot_spec.rb +4 -4
- data/spec/integration/atomic_updates_spec.rb +25 -11
- data/spec/integration/dynamic_fields_spec.rb +10 -10
- data/spec/integration/faceting_spec.rb +39 -39
- data/spec/integration/field_grouping_spec.rb +16 -16
- data/spec/integration/field_lists_spec.rb +41 -0
- data/spec/integration/geospatial_spec.rb +19 -8
- data/spec/integration/highlighting_spec.rb +5 -5
- data/spec/integration/indexing_spec.rb +5 -5
- data/spec/integration/keyword_search_spec.rb +47 -45
- data/spec/integration/local_search_spec.rb +4 -4
- data/spec/integration/more_like_this_spec.rb +7 -7
- data/spec/integration/scoped_search_spec.rb +107 -107
- data/spec/integration/spellcheck_spec.rb +52 -7
- data/spec/integration/stats_spec.rb +10 -10
- data/spec/integration/stored_fields_spec.rb +1 -1
- data/spec/integration/test_pagination.rb +4 -4
- data/spec/integration/unicode_spec.rb +1 -1
- data/spec/mocks/post.rb +5 -1
- data/spec/spec_helper.rb +11 -6
- data/sunspot.gemspec +3 -1
- metadata +40 -7
@@ -3,28 +3,28 @@ shared_examples_for 'fulltext query' do
|
|
3
3
|
search do
|
4
4
|
keywords 'keyword search'
|
5
5
|
end
|
6
|
-
connection.
|
6
|
+
expect(connection).to have_last_search_with(:q => 'keyword search')
|
7
7
|
end
|
8
8
|
|
9
9
|
it 'ignores keywords if empty' do
|
10
10
|
search do
|
11
11
|
keywords ''
|
12
12
|
end
|
13
|
-
connection.
|
13
|
+
expect(connection).not_to have_last_search_with(:defType => 'edismax')
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'ignores keywords if nil' do
|
17
17
|
search do
|
18
18
|
keywords nil
|
19
19
|
end
|
20
|
-
connection.
|
20
|
+
expect(connection).not_to have_last_search_with(:defType => 'edismax')
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'ignores keywords with only whitespace' do
|
24
24
|
search do
|
25
25
|
keywords " \t"
|
26
26
|
end
|
27
|
-
connection.
|
27
|
+
expect(connection).not_to have_last_search_with(:defType => 'edismax')
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'gracefully ignores keywords block if keywords ignored' do
|
@@ -37,14 +37,14 @@ shared_examples_for 'fulltext query' do
|
|
37
37
|
search do
|
38
38
|
keywords 'keyword search'
|
39
39
|
end
|
40
|
-
connection.
|
40
|
+
expect(connection).to have_last_search_with(:defType => 'edismax')
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'searches types in filter query if keywords used' do
|
44
44
|
search do
|
45
45
|
keywords 'keyword search'
|
46
46
|
end
|
47
|
-
connection.
|
47
|
+
expect(connection).to have_last_search_with(:fq => ['type:Post'])
|
48
48
|
end
|
49
49
|
|
50
50
|
describe 'with multiple keyword components' do
|
@@ -56,20 +56,21 @@ shared_examples_for 'fulltext query' do
|
|
56
56
|
end
|
57
57
|
|
58
58
|
it 'puts specified keywords in subquery' do
|
59
|
-
subqueries(:q).map { |subquery| subquery[:v] }.
|
59
|
+
expect(subqueries(:q).map { |subquery| subquery[:v] }).to eq(
|
60
60
|
['first search', 'second search']
|
61
|
+
)
|
61
62
|
end
|
62
63
|
|
63
64
|
it 'puts specified dismax parameters in subquery' do
|
64
|
-
subqueries(:q).first[:qf].
|
65
|
+
expect(subqueries(:q).first[:qf]).to eq('title_text')
|
65
66
|
end
|
66
67
|
|
67
68
|
it 'puts default dismax parameters in subquery' do
|
68
|
-
subqueries(:q).last[:qf].split(' ').sort.
|
69
|
+
expect(subqueries(:q).last[:qf].split(' ').sort).to eq(%w(backwards_title_text body_textsv tags_textv title_text))
|
69
70
|
end
|
70
71
|
|
71
72
|
it 'puts field list in main query' do
|
72
|
-
connection.
|
73
|
+
expect(connection).to have_last_search_with(:fl => '* score')
|
73
74
|
end
|
74
75
|
end
|
75
76
|
|
@@ -77,21 +78,21 @@ shared_examples_for 'fulltext query' do
|
|
77
78
|
search = search do
|
78
79
|
keywords 'keyword search'
|
79
80
|
end
|
80
|
-
connection.searches.last[:qf].split(' ').sort.
|
81
|
+
expect(connection.searches.last[:qf].split(' ').sort).to eq(%w(backwards_title_text body_textsv tags_textv title_text))
|
81
82
|
end
|
82
83
|
|
83
84
|
it 'searches both stored and unstored text fields' do
|
84
85
|
search Post, Namespaced::Comment do
|
85
86
|
keywords 'keyword search'
|
86
87
|
end
|
87
|
-
connection.searches.last[:qf].split(' ').sort.
|
88
|
+
expect(connection.searches.last[:qf].split(' ').sort).to eq(%w(author_name_text backwards_title_text body_text body_textsv tags_textv title_text))
|
88
89
|
end
|
89
90
|
|
90
91
|
it 'searches only specified text fields when specified' do
|
91
92
|
search do
|
92
93
|
keywords 'keyword search', :fields => [:title, :body]
|
93
94
|
end
|
94
|
-
connection.searches.last[:qf].split(' ').sort.
|
95
|
+
expect(connection.searches.last[:qf].split(' ').sort).to eq(%w(body_textsv title_text))
|
95
96
|
end
|
96
97
|
|
97
98
|
it 'excludes text fields when instructed' do
|
@@ -100,7 +101,7 @@ shared_examples_for 'fulltext query' do
|
|
100
101
|
exclude_fields :backwards_title, :body_mlt
|
101
102
|
end
|
102
103
|
end
|
103
|
-
connection.searches.last[:qf].split(' ').sort.
|
104
|
+
expect(connection.searches.last[:qf].split(' ').sort).to eq(%w(body_textsv tags_textv title_text))
|
104
105
|
end
|
105
106
|
|
106
107
|
it 'assigns boost to fields when specified' do
|
@@ -109,7 +110,7 @@ shared_examples_for 'fulltext query' do
|
|
109
110
|
fields :title => 2.0, :body => 0.75
|
110
111
|
end
|
111
112
|
end
|
112
|
-
connection.searches.last[:qf].split(' ').sort.
|
113
|
+
expect(connection.searches.last[:qf].split(' ').sort).to eq(%w(body_textsv^0.75 title_text^2.0))
|
113
114
|
end
|
114
115
|
|
115
116
|
it 'allows assignment of boosted and unboosted fields' do
|
@@ -124,19 +125,19 @@ shared_examples_for 'fulltext query' do
|
|
124
125
|
search Post, Namespaced::Comment do
|
125
126
|
keywords 'keyword search', :fields => [:body]
|
126
127
|
end
|
127
|
-
connection.searches.last[:qf].split(' ').sort.
|
128
|
+
expect(connection.searches.last[:qf].split(' ').sort).to eq(%w(body_text body_textsv))
|
128
129
|
end
|
129
130
|
|
130
131
|
it 'requests score when keywords used' do
|
131
132
|
search do
|
132
133
|
keywords 'keyword search'
|
133
134
|
end
|
134
|
-
connection.
|
135
|
+
expect(connection).to have_last_search_with(:fl => '* score')
|
135
136
|
end
|
136
137
|
|
137
138
|
it 'does not request score when keywords not used' do
|
138
139
|
search Post
|
139
|
-
connection.
|
140
|
+
expect(connection).not_to have_last_search_with(:fl)
|
140
141
|
end
|
141
142
|
|
142
143
|
it 'sets phrase fields' do
|
@@ -145,7 +146,7 @@ shared_examples_for 'fulltext query' do
|
|
145
146
|
phrase_fields :title => 2.0
|
146
147
|
end
|
147
148
|
end
|
148
|
-
connection.
|
149
|
+
expect(connection).to have_last_search_with(:pf => 'title_text^2.0')
|
149
150
|
end
|
150
151
|
|
151
152
|
it 'sets phrase fields with boost' do
|
@@ -154,7 +155,7 @@ shared_examples_for 'fulltext query' do
|
|
154
155
|
phrase_fields :title => 1.5
|
155
156
|
end
|
156
157
|
end
|
157
|
-
connection.
|
158
|
+
expect(connection).to have_last_search_with(:pf => 'title_text^1.5')
|
158
159
|
end
|
159
160
|
|
160
161
|
it 'sets phrase slop from DSL' do
|
@@ -163,7 +164,7 @@ shared_examples_for 'fulltext query' do
|
|
163
164
|
phrase_slop 2
|
164
165
|
end
|
165
166
|
end
|
166
|
-
connection.
|
167
|
+
expect(connection).to have_last_search_with(:ps => 2)
|
167
168
|
end
|
168
169
|
|
169
170
|
it 'sets boost for certain fields without restricting fields' do
|
@@ -172,7 +173,7 @@ shared_examples_for 'fulltext query' do
|
|
172
173
|
boost_fields :title => 1.5
|
173
174
|
end
|
174
175
|
end
|
175
|
-
connection.searches.last[:qf].split(' ').sort.
|
176
|
+
expect(connection.searches.last[:qf].split(' ').sort).to eq(%w(backwards_title_text body_textsv tags_textv title_text^1.5))
|
176
177
|
end
|
177
178
|
|
178
179
|
it 'ignores boost fields that do not apply' do
|
@@ -181,7 +182,7 @@ shared_examples_for 'fulltext query' do
|
|
181
182
|
boost_fields :bogus => 1.2, :title => 1.5
|
182
183
|
end
|
183
184
|
end
|
184
|
-
connection.searches.last[:qf].split(' ').sort.
|
185
|
+
expect(connection.searches.last[:qf].split(' ').sort).to eq(%w(backwards_title_text body_textsv tags_textv title_text^1.5))
|
185
186
|
end
|
186
187
|
|
187
188
|
it 'sets default boost with default fields' do
|
@@ -189,14 +190,14 @@ shared_examples_for 'fulltext query' do
|
|
189
190
|
keywords 'great pizza'
|
190
191
|
end
|
191
192
|
# Hashes in 1.8 aren't ordered
|
192
|
-
connection.searches.last[:qf].split(" ").sort.join(" ").
|
193
|
+
expect(connection.searches.last[:qf].split(" ").sort.join(" ")).to eq 'caption_text^1.5 description_text'
|
193
194
|
end
|
194
195
|
|
195
196
|
it 'sets default boost with fields specified in options' do
|
196
197
|
search Photo do
|
197
198
|
keywords 'great pizza', :fields => [:caption]
|
198
199
|
end
|
199
|
-
connection.
|
200
|
+
expect(connection).to have_last_search_with(:qf => 'caption_text^1.5')
|
200
201
|
end
|
201
202
|
|
202
203
|
it 'sets default boost with fields specified in DSL' do
|
@@ -205,7 +206,7 @@ shared_examples_for 'fulltext query' do
|
|
205
206
|
fields :caption
|
206
207
|
end
|
207
208
|
end
|
208
|
-
connection.
|
209
|
+
expect(connection).to have_last_search_with(:qf => 'caption_text^1.5')
|
209
210
|
end
|
210
211
|
|
211
212
|
it 'overrides default boost when specified in DSL' do
|
@@ -214,7 +215,7 @@ shared_examples_for 'fulltext query' do
|
|
214
215
|
fields :caption => 2.0
|
215
216
|
end
|
216
217
|
end
|
217
|
-
connection.
|
218
|
+
expect(connection).to have_last_search_with(:qf => 'caption_text^2.0')
|
218
219
|
end
|
219
220
|
|
220
221
|
it 'creates boost query' do
|
@@ -225,7 +226,7 @@ shared_examples_for 'fulltext query' do
|
|
225
226
|
end
|
226
227
|
end
|
227
228
|
end
|
228
|
-
connection.
|
229
|
+
expect(connection).to have_last_search_with(:bq => ['average_rating_ft:{2\.0 TO *}^2.0'])
|
229
230
|
end
|
230
231
|
|
231
232
|
it 'creates multiple boost queries' do
|
@@ -239,7 +240,7 @@ shared_examples_for 'fulltext query' do
|
|
239
240
|
end
|
240
241
|
end
|
241
242
|
end
|
242
|
-
connection.
|
243
|
+
expect(connection).to have_last_search_with(
|
243
244
|
:bq => [
|
244
245
|
'average_rating_ft:{2\.0 TO *}^2.0',
|
245
246
|
'featured_bs:true^1.5'
|
@@ -251,65 +252,65 @@ shared_examples_for 'fulltext query' do
|
|
251
252
|
search do
|
252
253
|
keywords 'great pizza', :minimum_match => 2
|
253
254
|
end
|
254
|
-
connection.
|
255
|
+
expect(connection).to have_last_search_with(:mm => 2)
|
255
256
|
end
|
256
257
|
|
257
258
|
it 'sends minimum match parameter from DSL' do
|
258
259
|
search do
|
259
260
|
keywords('great pizza') { minimum_match(2) }
|
260
261
|
end
|
261
|
-
connection.
|
262
|
+
expect(connection).to have_last_search_with(:mm => 2)
|
262
263
|
end
|
263
264
|
|
264
265
|
it 'sends tiebreaker parameter from options' do
|
265
266
|
search do
|
266
267
|
keywords 'great pizza', :tie => 0.1
|
267
268
|
end
|
268
|
-
connection.
|
269
|
+
expect(connection).to have_last_search_with(:tie => 0.1)
|
269
270
|
end
|
270
271
|
|
271
272
|
it 'sends tiebreaker parameter from DSL' do
|
272
273
|
search do
|
273
274
|
keywords('great pizza') { tie(0.1) }
|
274
275
|
end
|
275
|
-
connection.
|
276
|
+
expect(connection).to have_last_search_with(:tie => 0.1)
|
276
277
|
end
|
277
278
|
|
278
279
|
it 'sends query phrase slop from options' do
|
279
280
|
search do
|
280
281
|
keywords 'great pizza', :query_phrase_slop => 2
|
281
282
|
end
|
282
|
-
connection.
|
283
|
+
expect(connection).to have_last_search_with(:qs => 2)
|
283
284
|
end
|
284
285
|
|
285
286
|
it 'sends query phrase slop from DSL' do
|
286
287
|
search do
|
287
288
|
keywords('great pizza') { query_phrase_slop(2) }
|
288
289
|
end
|
289
|
-
connection.
|
290
|
+
expect(connection).to have_last_search_with(:qs => 2)
|
290
291
|
end
|
291
292
|
|
292
293
|
it 'allows specification of a text field that only exists in one type' do
|
293
294
|
search Post, Namespaced::Comment do
|
294
295
|
keywords 'keywords', :fields => :author_name
|
295
296
|
end
|
296
|
-
connection.searches.last[:qf].
|
297
|
+
expect(connection.searches.last[:qf]).to eq('author_name_text')
|
297
298
|
end
|
298
299
|
|
299
300
|
it 'raises Sunspot::UnrecognizedFieldError for nonexistant fields in keywords' do
|
300
|
-
|
301
|
+
expect do
|
301
302
|
search do
|
302
303
|
keywords :text, :fields => :bogus
|
303
304
|
end
|
304
|
-
end.
|
305
|
+
end.to raise_error(Sunspot::UnrecognizedFieldError)
|
305
306
|
end
|
306
307
|
|
307
308
|
it 'raises Sunspot::UnrecognizedFieldError if a text field that does not exist for any type is specified' do
|
308
|
-
|
309
|
+
expect do
|
309
310
|
search Post, Namespaced::Comment do
|
310
311
|
keywords 'fulltext', :fields => :bogus
|
311
312
|
end
|
312
|
-
end.
|
313
|
+
end.to raise_error(Sunspot::UnrecognizedFieldError)
|
313
314
|
end
|
314
315
|
|
315
316
|
describe 'connective examples' do
|
@@ -321,7 +322,7 @@ shared_examples_for 'fulltext query' do
|
|
321
322
|
end
|
322
323
|
end
|
323
324
|
|
324
|
-
connection.searches.last[:q].
|
325
|
+
expect(connection.searches.last[:q]).to eq "(_query_:\"{!edismax qf='title_text'}keywords1\" OR _query_:\"{!edismax qf='body_textsv'}keyword2\")"
|
325
326
|
end
|
326
327
|
|
327
328
|
it 'creates a conjunction inside of a disjunction' do
|
@@ -336,7 +337,7 @@ shared_examples_for 'fulltext query' do
|
|
336
337
|
end
|
337
338
|
end
|
338
339
|
|
339
|
-
connection.searches.last[:q].
|
340
|
+
expect(connection.searches.last[:q]).to eq "(_query_:\"{!edismax qf='body_textsv'}keywords1\" OR (_query_:\"{!edismax qf='body_textsv'}keyword2\" AND _query_:\"{!edismax qf='body_textsv'}keyword3\"))"
|
340
341
|
end
|
341
342
|
|
342
343
|
it 'does nothing special if #all/#any called from the top level or called multiple times' do
|
@@ -347,7 +348,7 @@ shared_examples_for 'fulltext query' do
|
|
347
348
|
end
|
348
349
|
end
|
349
350
|
|
350
|
-
connection.searches.last[:q].
|
351
|
+
expect(connection.searches.last[:q]).to eq "(_query_:\"{!edismax qf='title_text'}keywords1\" AND _query_:\"{!edismax qf='body_textsv'}keyword2\")"
|
351
352
|
end
|
352
353
|
|
353
354
|
it 'does nothing special if #all/#any are mixed and called multiple times' do
|
@@ -362,7 +363,7 @@ shared_examples_for 'fulltext query' do
|
|
362
363
|
end
|
363
364
|
end
|
364
365
|
|
365
|
-
connection.searches.last[:q].
|
366
|
+
expect(connection.searches.last[:q]).to eq "(_query_:\"{!edismax qf='title_text'}keywords1\" AND _query_:\"{!edismax qf='body_textsv'}keyword2\")"
|
366
367
|
|
367
368
|
search Post do
|
368
369
|
any do
|
@@ -375,7 +376,7 @@ shared_examples_for 'fulltext query' do
|
|
375
376
|
end
|
376
377
|
end
|
377
378
|
|
378
|
-
connection.searches.last[:q].
|
379
|
+
expect(connection.searches.last[:q]).to eq "(_query_:\"{!edismax qf='title_text'}keywords1\" OR _query_:\"{!edismax qf='body_textsv'}keyword2\")"
|
379
380
|
end
|
380
381
|
|
381
382
|
it "does not add empty parentheses" do
|
@@ -392,7 +393,7 @@ shared_examples_for 'fulltext query' do
|
|
392
393
|
end
|
393
394
|
end
|
394
395
|
|
395
|
-
connection.searches.last[:q].
|
396
|
+
expect(connection.searches.last[:q]).to eq "_query_:\"{!edismax qf='title_text'}keywords1\""
|
396
397
|
end
|
397
398
|
end
|
398
399
|
|
@@ -409,9 +410,9 @@ shared_examples_for 'fulltext query' do
|
|
409
410
|
q_name = "qPhoto#{obj_id}"
|
410
411
|
fq_name = "f#{q_name}"
|
411
412
|
|
412
|
-
connection.searches.last[:q].
|
413
|
-
connection.searches.last[q_name].
|
414
|
-
connection.searches.last[fq_name].
|
413
|
+
expect(connection.searches.last[:q]).to eq "(_query_:\"{!join from=photo_container_id_i to=id_i v=$#{q_name} fq=$#{fq_name}}\" OR _query_:\"{!edismax qf='description_text^1.2'}keyword2\")"
|
414
|
+
expect(connection.searches.last[q_name]).to eq "_query_:\"{!edismax qf='caption_text'}keyword1\""
|
415
|
+
expect(connection.searches.last[fq_name]).to eq "type:Photo"
|
415
416
|
end
|
416
417
|
|
417
418
|
it "should be able to resolve name conflicts with the :prefix option" do
|
@@ -426,9 +427,9 @@ shared_examples_for 'fulltext query' do
|
|
426
427
|
q_name = "qPhoto#{obj_id}"
|
427
428
|
fq_name = "f#{q_name}"
|
428
429
|
|
429
|
-
connection.searches.last[:q].
|
430
|
-
connection.searches.last[q_name].
|
431
|
-
connection.searches.last[fq_name].
|
430
|
+
expect(connection.searches.last[:q]).to eq "(_query_:\"{!edismax qf='description_text^1.2'}keyword1\" OR _query_:\"{!join from=photo_container_id_i to=id_i v=$#{q_name} fq=$#{fq_name}}\")"
|
431
|
+
expect(connection.searches.last[q_name]).to eq "_query_:\"{!edismax qf='description_text'}keyword2\""
|
432
|
+
expect(connection.searches.last[fq_name]).to eq "type:Photo"
|
432
433
|
end
|
433
434
|
|
434
435
|
it "should recognize fields when adding from DSL, e.g. when calling boost_fields" do
|
@@ -444,9 +445,9 @@ shared_examples_for 'fulltext query' do
|
|
444
445
|
q_name = "qPhoto#{obj_id}"
|
445
446
|
fq_name = "f#{q_name}"
|
446
447
|
|
447
|
-
connection.searches.last[:q].
|
448
|
-
connection.searches.last[q_name].
|
449
|
-
connection.searches.last[fq_name].
|
448
|
+
expect(connection.searches.last[:q]).to eq "(_query_:\"{!edismax qf='description_text^1.5'}keyword1\" OR _query_:\"{!join from=photo_container_id_i to=id_i v=$#{q_name} fq=$#{fq_name}}\")"
|
449
|
+
expect(connection.searches.last[q_name]).to eq "_query_:\"{!edismax qf='description_text^1.3'}keyword1\""
|
450
|
+
expect(connection.searches.last[fq_name]).to eq "type:Photo"
|
450
451
|
end
|
451
452
|
|
452
453
|
private
|
@@ -7,7 +7,7 @@ describe 'function query' do
|
|
7
7
|
boost(function { :average_rating })
|
8
8
|
end
|
9
9
|
end
|
10
|
-
connection.
|
10
|
+
expect(connection).to have_last_search_including(:bf, 'average_rating_ft')
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should send query to solr with boost function and boost amount" do
|
@@ -16,7 +16,7 @@ describe 'function query' do
|
|
16
16
|
boost(function { :average_rating }^5)
|
17
17
|
end
|
18
18
|
end
|
19
|
-
connection.
|
19
|
+
expect(connection).to have_last_search_including(:bf, 'average_rating_ft^5')
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should handle boost function with constant float" do
|
@@ -25,7 +25,7 @@ describe 'function query' do
|
|
25
25
|
boost(function { 10.5 })
|
26
26
|
end
|
27
27
|
end
|
28
|
-
connection.
|
28
|
+
expect(connection).to have_last_search_including(:bf, '10.5')
|
29
29
|
end
|
30
30
|
|
31
31
|
it "should handle boost function with constant float and boost amount" do
|
@@ -34,7 +34,7 @@ describe 'function query' do
|
|
34
34
|
boost(function { 10.5 }^5)
|
35
35
|
end
|
36
36
|
end
|
37
|
-
connection.
|
37
|
+
expect(connection).to have_last_search_including(:bf, '10.5^5')
|
38
38
|
end
|
39
39
|
|
40
40
|
it "should handle boost function with time literal" do
|
@@ -43,7 +43,7 @@ describe 'function query' do
|
|
43
43
|
boost(function { Time.parse('2010-03-25 14:13:00 EDT') })
|
44
44
|
end
|
45
45
|
end
|
46
|
-
connection.
|
46
|
+
expect(connection).to have_last_search_including(:bf, '2010-03-25T18:13:00Z')
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should handle arbitrary functions in a function query block" do
|
@@ -52,7 +52,7 @@ describe 'function query' do
|
|
52
52
|
boost(function { product(:average_rating, 10) })
|
53
53
|
end
|
54
54
|
end
|
55
|
-
connection.
|
55
|
+
expect(connection).to have_last_search_including(:bf, 'product(average_rating_ft,10)')
|
56
56
|
end
|
57
57
|
|
58
58
|
it "should handle the sub function in a function query block" do
|
@@ -61,7 +61,7 @@ describe 'function query' do
|
|
61
61
|
boost(function { sub(:average_rating, 10) })
|
62
62
|
end
|
63
63
|
end
|
64
|
-
connection.
|
64
|
+
expect(connection).to have_last_search_including(:bf, 'sub(average_rating_ft,10)')
|
65
65
|
end
|
66
66
|
|
67
67
|
it "should handle boost amounts on function query block" do
|
@@ -70,7 +70,7 @@ describe 'function query' do
|
|
70
70
|
boost(function { sub(:average_rating, 10)^5 })
|
71
71
|
end
|
72
72
|
end
|
73
|
-
connection.
|
73
|
+
expect(connection).to have_last_search_including(:bf, 'sub(average_rating_ft,10)^5')
|
74
74
|
end
|
75
75
|
|
76
76
|
it "should handle nested functions in a function query block" do
|
@@ -79,28 +79,28 @@ describe 'function query' do
|
|
79
79
|
boost(function { product(:average_rating, sum(:average_rating, 20)) })
|
80
80
|
end
|
81
81
|
end
|
82
|
-
connection.
|
82
|
+
expect(connection).to have_last_search_including(:bf, 'product(average_rating_ft,sum(average_rating_ft,20))')
|
83
83
|
end
|
84
84
|
|
85
85
|
# TODO SOLR 1.5
|
86
86
|
it "should raise ArgumentError if string literal passed" do
|
87
|
-
|
87
|
+
expect do
|
88
88
|
session.search Post do
|
89
89
|
keywords('pizza') do
|
90
90
|
boost(function { "hello world" })
|
91
91
|
end
|
92
92
|
end
|
93
|
-
end.
|
93
|
+
end.to raise_error(ArgumentError)
|
94
94
|
end
|
95
95
|
|
96
96
|
it "should raise UnrecognizedFieldError if bogus field name passed" do
|
97
|
-
|
97
|
+
expect do
|
98
98
|
session.search Post do
|
99
99
|
keywords('pizza') do
|
100
100
|
boost(function { :bogus })
|
101
101
|
end
|
102
102
|
end
|
103
|
-
end.
|
103
|
+
end.to raise_error(Sunspot::UnrecognizedFieldError)
|
104
104
|
end
|
105
105
|
|
106
106
|
it "should send query to solr with multiplicative boost function" do
|
@@ -109,7 +109,7 @@ describe 'function query' do
|
|
109
109
|
multiplicative_boost(function { :average_rating })
|
110
110
|
end
|
111
111
|
end
|
112
|
-
connection.
|
112
|
+
expect(connection).to have_last_search_including(:boost, 'average_rating_ft')
|
113
113
|
end
|
114
114
|
|
115
115
|
it "should send query to solr with multiplicative boost function and boost amount" do
|
@@ -118,7 +118,7 @@ describe 'function query' do
|
|
118
118
|
multiplicative_boost(function { :average_rating }^5)
|
119
119
|
end
|
120
120
|
end
|
121
|
-
connection.
|
121
|
+
expect(connection).to have_last_search_including(:boost, 'average_rating_ft^5')
|
122
122
|
end
|
123
123
|
|
124
124
|
it "should handle multiplicative boost function with constant float" do
|
@@ -127,7 +127,7 @@ describe 'function query' do
|
|
127
127
|
multiplicative_boost(function { 10.5 })
|
128
128
|
end
|
129
129
|
end
|
130
|
-
connection.
|
130
|
+
expect(connection).to have_last_search_including(:boost, '10.5')
|
131
131
|
end
|
132
132
|
|
133
133
|
it "should handle multiplicative boost function with constant float and boost amount" do
|
@@ -136,7 +136,7 @@ describe 'function query' do
|
|
136
136
|
multiplicative_boost(function { 10.5 }^5)
|
137
137
|
end
|
138
138
|
end
|
139
|
-
connection.
|
139
|
+
expect(connection).to have_last_search_including(:boost, '10.5^5')
|
140
140
|
end
|
141
141
|
|
142
142
|
it "should handle multiplicative boost function with time literal" do
|
@@ -145,7 +145,7 @@ describe 'function query' do
|
|
145
145
|
multiplicative_boost(function { Time.parse('2010-03-25 14:13:00 EDT') })
|
146
146
|
end
|
147
147
|
end
|
148
|
-
connection.
|
148
|
+
expect(connection).to have_last_search_including(:boost, '2010-03-25T18:13:00Z')
|
149
149
|
end
|
150
150
|
|
151
151
|
it "should handle arbitrary functions in a function query block" do
|
@@ -154,7 +154,7 @@ describe 'function query' do
|
|
154
154
|
multiplicative_boost(function { product(:average_rating, 10) })
|
155
155
|
end
|
156
156
|
end
|
157
|
-
connection.
|
157
|
+
expect(connection).to have_last_search_including(:boost, 'product(average_rating_ft,10)')
|
158
158
|
end
|
159
159
|
|
160
160
|
it "should handle the sub function in a multiplicative boost function query block" do
|
@@ -163,7 +163,7 @@ describe 'function query' do
|
|
163
163
|
multiplicative_boost(function { sub(:average_rating, 10) })
|
164
164
|
end
|
165
165
|
end
|
166
|
-
connection.
|
166
|
+
expect(connection).to have_last_search_including(:boost, 'sub(average_rating_ft,10)')
|
167
167
|
end
|
168
168
|
|
169
169
|
it "should handle boost amounts on multiplicative boost function query block" do
|
@@ -172,7 +172,7 @@ describe 'function query' do
|
|
172
172
|
multiplicative_boost(function { sub(:average_rating, 10)^5 })
|
173
173
|
end
|
174
174
|
end
|
175
|
-
connection.
|
175
|
+
expect(connection).to have_last_search_including(:boost, 'sub(average_rating_ft,10)^5')
|
176
176
|
end
|
177
177
|
|
178
178
|
it "should handle nested functions in a multiplicative boost function query block" do
|
@@ -181,28 +181,28 @@ describe 'function query' do
|
|
181
181
|
multiplicative_boost(function { product(:average_rating, sum(:average_rating, 20)) })
|
182
182
|
end
|
183
183
|
end
|
184
|
-
connection.
|
184
|
+
expect(connection).to have_last_search_including(:boost, 'product(average_rating_ft,sum(average_rating_ft,20))')
|
185
185
|
end
|
186
186
|
|
187
187
|
# TODO SOLR 1.5
|
188
188
|
it "should raise ArgumentError if string literal passed to multiplicative boost" do
|
189
|
-
|
189
|
+
expect do
|
190
190
|
session.search Post do
|
191
191
|
keywords('pizza') do
|
192
192
|
multiplicative_boost(function { "hello world" })
|
193
193
|
end
|
194
194
|
end
|
195
|
-
end.
|
195
|
+
end.to raise_error(ArgumentError)
|
196
196
|
end
|
197
197
|
|
198
198
|
it "should raise UnrecognizedFieldError if bogus field name passed to multiplicative boost" do
|
199
|
-
|
199
|
+
expect do
|
200
200
|
session.search Post do
|
201
201
|
keywords('pizza') do
|
202
202
|
multiplicative_boost(function { :bogus })
|
203
203
|
end
|
204
204
|
end
|
205
|
-
end.
|
205
|
+
end.to raise_error(Sunspot::UnrecognizedFieldError)
|
206
206
|
end
|
207
207
|
|
208
208
|
end
|