picky 4.15.1 → 4.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/picky/categories_indexed.rb +1 -2
- data/lib/picky/category_realtime.rb +2 -0
- data/lib/picky/search_facets.rb +14 -6
- data/spec/functional/facets_spec.rb +36 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NjVkMTA4OTYyYzkyZTMzZjAxYjM3YWRlMGQwMGE2MDc4Zjc3NDA4Nw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NDBiYmEzNWJlNDE3OTNkMmVhODU3NWYyY2QyZTQ4ZTdiN2RmZTA5Mg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YmQ3MzczYTdmZjFlOTMwYmQ3ZjY3ZTkwMzBiMjU2MTUzMGQyZmM1ZjNkODg2
|
10
|
+
NGFjMTc0NzQ3MDRiZGQ3ZjY1ZGY3MzNlYjMyY2FkNTJmZWNlMzg2YWE0NWEx
|
11
|
+
Njk5NWQzYmI2OWVmMWM0NTMyZTliZGUwMTE2NDdmZWI4NzVlMGQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NGRmYmE3OTMxOTE0NmY3OTY2NThhMTdhNDI1YzQ5OTQ3ZDhlZjhmNjEzMmEw
|
14
|
+
NjcyNGIyYTVjYjdkNzU3NTFhNTZkN2M1YzdiMDBiOWNlMmQ5YTBmZDFiMjRk
|
15
|
+
MTFkZGIwOThmNmEzOTRjODRlMDVlMzYyMTEyYjI5ZTcwOTkwYTA=
|
@@ -45,11 +45,10 @@ module Picky
|
|
45
45
|
# Note: Returns [] if no categories matched (will produce no result).
|
46
46
|
#
|
47
47
|
def possible_for token, preselected_categories = nil
|
48
|
-
|
48
|
+
(preselected_categories || possible_categories(token)).inject([]) do |combinations, category|
|
49
49
|
combination = category.combination_for token
|
50
50
|
combination ? combinations << combination : combinations
|
51
51
|
end
|
52
|
-
possible
|
53
52
|
end
|
54
53
|
|
55
54
|
# This returns the possible categories for this token.
|
data/lib/picky/search_facets.rb
CHANGED
@@ -53,32 +53,40 @@ module Picky
|
|
53
53
|
# Get actual counts.
|
54
54
|
#
|
55
55
|
if no_counts
|
56
|
-
facets_without_counts counts, minimal_counts, tokenized_filter_query, key_token.text
|
56
|
+
facets_without_counts counts, minimal_counts, tokenized_filter_query, key_token.text, options
|
57
57
|
else
|
58
|
-
facets_with_counts counts, minimal_counts, tokenized_filter_query, key_token.text
|
58
|
+
facets_with_counts counts, minimal_counts, tokenized_filter_query, key_token.text, options
|
59
59
|
end
|
60
60
|
end
|
61
|
-
def facets_without_counts counts, minimal_counts, tokenized_filter_query, last_token_text
|
61
|
+
def facets_without_counts counts, minimal_counts, tokenized_filter_query, last_token_text, options = {}
|
62
62
|
counts.inject([]) do |result, (key, _)|
|
63
63
|
# Replace only the key token text because that
|
64
64
|
# is the only information that changes in between
|
65
65
|
# queries.
|
66
66
|
#
|
67
67
|
last_token_text.replace key
|
68
|
-
|
68
|
+
|
69
|
+
# Calculate up to 1000 facets using unique to show correct facet counts.
|
70
|
+
# TODO Redesign and deoptimize the whole process.
|
71
|
+
#
|
72
|
+
total = search_with(tokenized_filter_query, 1000, 0, nil, true).total
|
69
73
|
|
70
74
|
next result unless total >= minimal_counts
|
71
75
|
result << key
|
72
76
|
end
|
73
77
|
end
|
74
|
-
def facets_with_counts counts, minimal_counts, tokenized_filter_query, last_token_text
|
78
|
+
def facets_with_counts counts, minimal_counts, tokenized_filter_query, last_token_text, options = {}
|
75
79
|
counts.inject({}) do |result, (key, _)|
|
76
80
|
# Replace only the key token text because that
|
77
81
|
# is the only information that changes in between
|
78
82
|
# queries.
|
79
83
|
#
|
80
84
|
last_token_text.replace key
|
81
|
-
|
85
|
+
|
86
|
+
# Calculate up to 1000 facets using unique to show correct facet counts.
|
87
|
+
# TODO Redesign and deoptimize the whole process.
|
88
|
+
#
|
89
|
+
total = search_with(tokenized_filter_query, 1000, 0, nil, true).total
|
82
90
|
|
83
91
|
next result unless total >= minimal_counts
|
84
92
|
result[key] = total
|
@@ -189,5 +189,41 @@ describe 'facets' do
|
|
189
189
|
end
|
190
190
|
end
|
191
191
|
|
192
|
+
describe 'Search#facets with identical category text/filter text' do
|
193
|
+
it 'does not report the same thing multiple times up to a limit' do
|
194
|
+
require 'picky'
|
195
|
+
|
196
|
+
shoe = Struct.new(:id, :color, :name)
|
197
|
+
|
198
|
+
shoes_index = Picky::Index.new(:shoes) do
|
199
|
+
category :color
|
200
|
+
category :name
|
201
|
+
end
|
202
|
+
|
203
|
+
shoes_search = Picky::Search.new shoes_index
|
204
|
+
|
205
|
+
shoes_index.add shoe.new(1, 'black', 'Outdoor Black')
|
206
|
+
|
207
|
+
shoes_search.facets(:color).should == { 'black' => 1 }
|
208
|
+
shoes_search.facets(:color, filter: 'black').should == { 'black' => 1 }
|
209
|
+
|
210
|
+
999.times do |i|
|
211
|
+
shoes_index.add shoe.new(i+2, 'black', 'Outdoor Black')
|
212
|
+
end
|
213
|
+
|
214
|
+
shoes_search.facets(:color).should == { 'black' => 1000 }
|
215
|
+
shoes_search.facets(:color, filter: 'black').should == { 'black' => 1000 }
|
216
|
+
|
217
|
+
# But then, over 1000 the count is only a very rough estimate.
|
218
|
+
#
|
219
|
+
500.times do |i|
|
220
|
+
shoes_index.add shoe.new(i+1001, 'black', 'Outdoor Black')
|
221
|
+
end
|
222
|
+
|
223
|
+
shoes_search.facets(:color).should == { 'black' => 1500 }
|
224
|
+
shoes_search.facets(:color, filter: 'black').should == { 'black' => 2000 }
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
192
228
|
end
|
193
229
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: picky
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Hanke
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-07-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 4.
|
47
|
+
version: 4.16.0
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 4.
|
54
|
+
version: 4.16.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: text
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|