picky 4.25.0 → 4.25.1
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/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
|