picky 4.5.9 → 4.5.10
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.
- data/lib/picky/query/tokens.rb +12 -2
- data/lib/picky/search_facets.rb +15 -1
- data/spec/functional/facets_spec.rb +5 -0
- data/spec/lib/query/tokens_spec.rb +17 -0
- metadata +17 -17
data/lib/picky/query/tokens.rb
CHANGED
@@ -8,7 +8,7 @@ module Picky
|
|
8
8
|
#
|
9
9
|
class Tokens
|
10
10
|
|
11
|
-
attr_reader :ignore_unassigned
|
11
|
+
attr_reader :tokens, :ignore_unassigned
|
12
12
|
|
13
13
|
# Basically delegates to its internal tokens array.
|
14
14
|
#
|
@@ -74,10 +74,20 @@ module Picky
|
|
74
74
|
def originals
|
75
75
|
@tokens.map(&:original)
|
76
76
|
end
|
77
|
-
|
77
|
+
|
78
|
+
#
|
79
|
+
#
|
78
80
|
def == other
|
79
81
|
self.tokens == other.tokens
|
80
82
|
end
|
83
|
+
|
84
|
+
# Non destructive.
|
85
|
+
#
|
86
|
+
# TODO Make destructive?
|
87
|
+
#
|
88
|
+
def + other
|
89
|
+
self.class.new (@tokens + other.tokens), (self.ignore_unassigned || other.ignore_unassigned)
|
90
|
+
end
|
81
91
|
|
82
92
|
# Just join the token original texts.
|
83
93
|
#
|
data/lib/picky/search_facets.rb
CHANGED
@@ -17,10 +17,24 @@ module Picky
|
|
17
17
|
def facets category_identifier, options = {}
|
18
18
|
raise "#{__method__} cannot be used on searches with more than 1 index yet. Sorry!" if indexes.size > 1
|
19
19
|
index = indexes.first
|
20
|
+
|
21
|
+
# Get index-specific facet weights.
|
22
|
+
#
|
20
23
|
weights = index.facets category_identifier, options
|
24
|
+
|
25
|
+
# We're done if there is no filter.
|
26
|
+
#
|
21
27
|
return weights unless filter_query = options[:filter]
|
28
|
+
|
29
|
+
# Pre-tokenize filter for reuse.
|
30
|
+
#
|
31
|
+
tokenized_filter = tokenized filter_query
|
32
|
+
|
33
|
+
# Filter out impossible facets.
|
34
|
+
#
|
22
35
|
weights.select do |key, weight|
|
23
|
-
|
36
|
+
tokenized_query = tokenized "#{category_identifier}:#{key}"
|
37
|
+
search_with(tokenized_filter + tokenized_query, 0, 0).total > 0
|
24
38
|
end
|
25
39
|
end
|
26
40
|
|
@@ -116,6 +116,11 @@ describe 'facets' do
|
|
116
116
|
end
|
117
117
|
|
118
118
|
describe 'facets' do
|
119
|
+
it 'is fast enough' do
|
120
|
+
performance_of {
|
121
|
+
10.times { finder.facets(:age_category, filter: 'surname:meier name:peter') }
|
122
|
+
}.should < 0.0025
|
123
|
+
end
|
119
124
|
it 'filters them correctly' do
|
120
125
|
# It has one facet.
|
121
126
|
#
|
@@ -208,6 +208,23 @@ describe Picky::Query::Tokens do
|
|
208
208
|
@tokens.to_s.should == 'Hello~ I~ Am A* Token~'
|
209
209
|
end
|
210
210
|
end
|
211
|
+
|
212
|
+
describe '+' do
|
213
|
+
before(:each) do
|
214
|
+
@tokens = described_class.new [
|
215
|
+
Picky::Query::Token.processed('hello~', 'Hello~'),
|
216
|
+
Picky::Query::Token.processed('i~', 'I~')
|
217
|
+
]
|
218
|
+
@other = described_class.new [
|
219
|
+
Picky::Query::Token.processed('am', 'Am'),
|
220
|
+
Picky::Query::Token.processed('a*', 'A*'),
|
221
|
+
Picky::Query::Token.processed('token~', 'Token~')
|
222
|
+
]
|
223
|
+
end
|
224
|
+
it 'should work correctly' do
|
225
|
+
(@tokens + @other).to_s.should == 'Hello~ I~ Am A* Token~'
|
226
|
+
end
|
227
|
+
end
|
211
228
|
|
212
229
|
def self.it_should_delegate name
|
213
230
|
describe name do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: picky
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.5.
|
4
|
+
version: 4.5.10
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70099253389300 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,21 +21,21 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70099253389300
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: picky-client
|
27
|
-
requirement: &
|
27
|
+
requirement: &70099253388340 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 4.5.
|
32
|
+
version: 4.5.10
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70099253388340
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: text
|
38
|
-
requirement: &
|
38
|
+
requirement: &70099253386400 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70099253386400
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: multi_json
|
49
|
-
requirement: &
|
49
|
+
requirement: &70099253385580 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70099253385580
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: activesupport
|
60
|
-
requirement: &
|
60
|
+
requirement: &70099253400520 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '3.0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70099253400520
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: procrastinate
|
71
|
-
requirement: &
|
71
|
+
requirement: &70099253398380 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0.4'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70099253398380
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rack_fast_escape
|
82
|
-
requirement: &
|
82
|
+
requirement: &70099253396680 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70099253396680
|
91
91
|
description: Fast Ruby semantic text search engine with comfortable single field interface.
|
92
92
|
email: florian.hanke+picky@gmail.com
|
93
93
|
executables:
|