picky 4.25.0 → 4.25.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/picky/query/token.rb +1 -1
- data/lib/picky/search_facets.rb +12 -5
- data/spec/functional/facets_spec.rb +81 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44a3b70f33fe644a7c9ab0cc519af8c182cf09c3
|
4
|
+
data.tar.gz: e74d3117c847a410ef852ad9d850179327cd0b97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1da0628b51f4678f645d25dc637208ab508b580d1fbe33e7609538df2b322626cddd48bf85283b2f05ec374f1c37af16bf141d7421b7178a9ec6aa2f3bf067b
|
7
|
+
data.tar.gz: 2d28bbc6d9d95e11fd2829ad6d6695746ee3b273b298826420311eeb7005087c4c28cd3f5e10a9c3fb8fe143dbb857e231f685247f059d06c108c03948c16f4a
|
data/lib/picky/query/token.rb
CHANGED
data/lib/picky/search_facets.rb
CHANGED
@@ -40,7 +40,8 @@ module Picky
|
|
40
40
|
# key_token = Query::Token.new ''
|
41
41
|
# key_token.predefined_categories = [index[category_identifier]]
|
42
42
|
#
|
43
|
-
|
43
|
+
empty = @symbol_keys ? :'' : ''
|
44
|
+
key_token = Query::Token.new empty, nil, predefined_categories
|
44
45
|
|
45
46
|
# Pre-tokenize filter for reuse.
|
46
47
|
#
|
@@ -55,9 +56,13 @@ module Picky
|
|
55
56
|
# Get actual counts.
|
56
57
|
#
|
57
58
|
if no_counts
|
58
|
-
facets_without_counts counts, minimal_counts, tokenized_filter_query,
|
59
|
+
facets_without_counts counts, minimal_counts, tokenized_filter_query, options do |last_text|
|
60
|
+
key_token.text = last_text # TODO Why is this necessary?
|
61
|
+
end
|
59
62
|
else
|
60
|
-
facets_with_counts
|
63
|
+
facets_with_counts counts, minimal_counts, tokenized_filter_query, key_token.text, options do |last_text|
|
64
|
+
key_token.text = last_text # TODO Why is this necessary?
|
65
|
+
end
|
61
66
|
end
|
62
67
|
end
|
63
68
|
def facets_without_counts counts, minimal_counts, tokenized_filter_query, last_token_text, options = {}
|
@@ -66,7 +71,9 @@ module Picky
|
|
66
71
|
# is the only information that changes in between
|
67
72
|
# queries.
|
68
73
|
#
|
69
|
-
|
74
|
+
# Note: DOes not use replace anymore.
|
75
|
+
#
|
76
|
+
yield key
|
70
77
|
|
71
78
|
# Calculate up to 1000 facets using unique to show correct facet counts.
|
72
79
|
# TODO Redesign and deoptimize the whole process.
|
@@ -83,7 +90,7 @@ module Picky
|
|
83
90
|
# is the only information that changes in between
|
84
91
|
# queries.
|
85
92
|
#
|
86
|
-
|
93
|
+
yield key
|
87
94
|
|
88
95
|
# Calculate up to 1000 facets using unique to show correct facet counts.
|
89
96
|
# TODO Redesign and deoptimize the whole process.
|
@@ -226,4 +226,85 @@ describe 'facets' do
|
|
226
226
|
end
|
227
227
|
|
228
228
|
end
|
229
|
+
|
230
|
+
describe 'simple example with symbols' do
|
231
|
+
let(:index) {
|
232
|
+
index = Picky::Index.new :facets do
|
233
|
+
symbol_keys true
|
234
|
+
category :name, partial: Picky::Partial::Substring.new(from: 1)
|
235
|
+
category :surname
|
236
|
+
end
|
237
|
+
|
238
|
+
thing = Struct.new :id, :name, :surname
|
239
|
+
index.add thing.new(1, 'fritz', 'hanke')
|
240
|
+
index.add thing.new(2, 'kaspar', 'schiess')
|
241
|
+
index.add thing.new(3, 'florian', 'hanke')
|
242
|
+
|
243
|
+
index
|
244
|
+
}
|
245
|
+
let(:finder) do
|
246
|
+
Picky::Search.new(index) { symbol_keys }
|
247
|
+
end
|
248
|
+
|
249
|
+
describe 'Index#facets' do
|
250
|
+
it 'is correct' do
|
251
|
+
# Picky has 2 facets with different counts for surname.
|
252
|
+
#
|
253
|
+
index.facets(:surname).should == {
|
254
|
+
hanke: 2,
|
255
|
+
schiess: 1
|
256
|
+
}
|
257
|
+
|
258
|
+
# It has 3 facets with the same count for name.
|
259
|
+
#
|
260
|
+
index.facets(:name).should == {
|
261
|
+
fritz: 1,
|
262
|
+
kaspar: 1,
|
263
|
+
florian: 1
|
264
|
+
}
|
265
|
+
|
266
|
+
# Picky only selects facets with a count >= the given one.
|
267
|
+
#
|
268
|
+
index.facets(:surname, at_least: 2).should == {
|
269
|
+
hanke: 2
|
270
|
+
}
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
describe 'Search#facets' do
|
275
|
+
it 'filters them correctly' do
|
276
|
+
# Passing in no filter query just returns the facets
|
277
|
+
#
|
278
|
+
finder.facets(:surname).should == {
|
279
|
+
hanke: 2,
|
280
|
+
schiess: 1
|
281
|
+
}
|
282
|
+
|
283
|
+
# It has two facets.
|
284
|
+
#
|
285
|
+
finder.facets(:name, filter: 'surname:hanke').should == {
|
286
|
+
fritz: 1,
|
287
|
+
florian: 1
|
288
|
+
}
|
289
|
+
|
290
|
+
# It only uses exact matches (ie. the last token is not partialized).
|
291
|
+
#
|
292
|
+
finder.facets(:name, filter: 'surname:hank').should == {}
|
293
|
+
|
294
|
+
# It allows explicit partial matches.
|
295
|
+
#
|
296
|
+
finder.facets(:name, filter: 'surname:hank*').should == {
|
297
|
+
fritz: 1,
|
298
|
+
florian: 1
|
299
|
+
}
|
300
|
+
|
301
|
+
# It allows explicit partial matches.
|
302
|
+
#
|
303
|
+
finder.facets(:name, filter: 'surname:hank*').should == {
|
304
|
+
fritz: 1,
|
305
|
+
florian: 1
|
306
|
+
}
|
307
|
+
end
|
308
|
+
end
|
309
|
+
end
|
229
310
|
end
|