picky 3.1.10 → 3.1.11

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.
@@ -19,7 +19,7 @@ module Picky
19
19
  text = text.to_sym
20
20
  indexed_exact.add id, text
21
21
 
22
- # TODO Beautify.
22
+ # TODO Refactor.
23
23
  #
24
24
  indexed_partial.partial_strategy.each_partial text do |partial_text|
25
25
  indexed_partial.add id, partial_text
@@ -16,9 +16,12 @@ module Picky
16
16
  ids = @inverted[sym]
17
17
  ids.delete id
18
18
 
19
+ encoded = self.similarity_strategy.encoded sym
20
+
19
21
  if ids.empty?
20
- @inverted.delete sym
21
- @weights.delete sym
22
+ @inverted.delete sym
23
+ @weights.delete sym
24
+ @similarity.delete encoded # Since no element uses this sym anymore, we can delete the similarity for it.
22
25
  else
23
26
  @weights[sym] = self.weights_strategy.weight_for ids.size
24
27
  end
@@ -35,6 +38,8 @@ module Picky
35
38
  syms = @realtime_mapping[id]
36
39
  syms = (@realtime_mapping[id] = []) unless syms # TODO Nicefy.
37
40
 
41
+ # Inverted.
42
+ #
38
43
  ids = if syms.include? sym
39
44
  ids = @inverted[sym]
40
45
  ids.delete id # Move id
@@ -45,7 +50,21 @@ module Picky
45
50
  inverted.unshift id
46
51
  end
47
52
 
53
+ # Weights.
54
+ #
48
55
  @weights[sym] = self.weights_strategy.weight_for ids.size
56
+
57
+ # Similarity.
58
+ #
59
+ if encoded = self.similarity_strategy.encoded(sym)
60
+ similarity = @similarity[encoded] ||= []
61
+ if similarity.include? sym
62
+ similarity.delete sym # Not completely correct, as others will also be affected, but meh.
63
+ similarity.unshift sym #
64
+ else
65
+ similarity.unshift sym
66
+ end
67
+ end
49
68
  end
50
69
 
51
70
  end
@@ -8,7 +8,7 @@ describe Picky::Indexed::Bundle do
8
8
 
9
9
  @weights = Picky::Generators::Weights::Default
10
10
  @partial = Picky::Generators::Partial::Default
11
- @similarity = stub :similarity
11
+ @similarity = Picky::Generators::Similarity::DoubleMetaphone.new 3
12
12
  @bundle = described_class.new :some_name, @category, Picky::Backends::Memory.new, @weights, @partial, @similarity
13
13
  end
14
14
 
@@ -21,6 +21,9 @@ describe Picky::Indexed::Bundle do
21
21
  it 'is by default empty' do
22
22
  @bundle.inverted.should == {}
23
23
  end
24
+ it 'is by default empty' do
25
+ @bundle.similarity.should == {}
26
+ end
24
27
 
25
28
  describe 'combined' do
26
29
  it 'works correctly' do
@@ -29,7 +32,8 @@ describe Picky::Indexed::Bundle do
29
32
 
30
33
  @bundle.realtime_mapping.should == { 1 => [:title], 2 => [:title] }
31
34
  @bundle.inverted.should == { :title => [2,1] }
32
- @bundle.weights.should == { :title => 0.6931471805599453 }
35
+ @bundle.weights.should == { :title => 0.6931471805599453 }
36
+ @bundle.similarity.should == { :TTL => [:title] }
33
37
  end
34
38
  it 'works correctly' do
35
39
  @bundle.add 1, :title
@@ -38,8 +42,9 @@ describe Picky::Indexed::Bundle do
38
42
  @bundle.remove 2
39
43
 
40
44
  @bundle.realtime_mapping.should == {}
41
- @bundle.weights.should == {}
45
+ @bundle.weights.should == {}
42
46
  @bundle.inverted.should == {}
47
+ @bundle.similarity.should == {}
43
48
  end
44
49
  it 'works correctly' do
45
50
  @bundle.add 1, :title
@@ -48,8 +53,9 @@ describe Picky::Indexed::Bundle do
48
53
  @bundle.remove 1
49
54
 
50
55
  @bundle.realtime_mapping.should == {}
51
- @bundle.weights.should == {}
56
+ @bundle.weights.should == {}
52
57
  @bundle.inverted.should == {}
58
+ @bundle.similarity.should == {}
53
59
  end
54
60
  it 'works correctly' do
55
61
  @bundle.add 1, :title
@@ -58,8 +64,9 @@ describe Picky::Indexed::Bundle do
58
64
  @bundle.remove 1
59
65
 
60
66
  @bundle.realtime_mapping.should == { 2 => [:thing] }
61
- @bundle.weights.should == { :thing => 0.0 }
67
+ @bundle.weights.should == { :thing => 0.0 }
62
68
  @bundle.inverted.should == { :thing => [2] }
69
+ @bundle.similarity.should == { :"0NK" => [:thing] }
63
70
  end
64
71
  it 'works correctly' do
65
72
  @bundle.add 1, :title
@@ -68,6 +75,7 @@ describe Picky::Indexed::Bundle do
68
75
  @bundle.realtime_mapping.should == { 1 => [:title] }
69
76
  @bundle.weights.should == { :title => 0.0 }
70
77
  @bundle.inverted.should == { :title => [1] }
78
+ @bundle.similarity.should == { :TTL => [:title] }
71
79
  end
72
80
  it 'works correctly' do
73
81
  @bundle.add 1, :title
@@ -77,6 +85,7 @@ describe Picky::Indexed::Bundle do
77
85
  @bundle.realtime_mapping.should == {}
78
86
  @bundle.weights.should == {}
79
87
  @bundle.inverted.should == {}
88
+ @bundle.similarity.should == {}
80
89
  end
81
90
  end
82
91
 
@@ -97,8 +106,9 @@ describe Picky::Indexed::Bundle do
97
106
  it 'works correctly' do
98
107
  @bundle.add 1, :title
99
108
 
100
- @bundle.weights.should == { :title => 0.0 }
109
+ @bundle.weights.should == { :title => 0.0 }
101
110
  @bundle.inverted.should == { :title => [1] }
111
+ @bundle.similarity.should == { :TTL => [:title] }
102
112
  end
103
113
  end
104
114
 
@@ -11,7 +11,13 @@ describe "Realtime Indexing" do
11
11
  end
12
12
  end
13
13
 
14
- let(:index) { Picky::Index.new(:test) { source []; category :title; category :author } }
14
+ let(:index) do
15
+ Picky::Index.new(:test) do
16
+ source []
17
+ category :title
18
+ category :author, similarity: Picky::Generators::Similarity::DoubleMetaphone.new(3)
19
+ end
20
+ end
15
21
  let(:books) { Picky::Search.new index }
16
22
 
17
23
  before(:each) do
@@ -120,11 +126,74 @@ describe "Realtime Indexing" do
120
126
  it 'handles more complex cases' do
121
127
  index.remove 1
122
128
 
123
- books.search('Title"').ids.should == []
129
+ books.search('Titl').ids.should == []
124
130
 
125
131
  index.replace Book.new(1, "Title New", "Author New")
126
132
 
127
- books.search('title:New"').ids.should == [1]
133
+ books.search('title:Ne').ids.should == [1]
134
+ end
135
+ end
136
+
137
+ context 'similarity' do
138
+ it 'finds the first entry' do
139
+ books.search('Authr~').ids.should == [1]
140
+ end
141
+
142
+ it 'allows removing something' do
143
+ index.remove 1
144
+ end
145
+ it 'is not findable anymore after removing' do
146
+ books.search('Authr~').ids.should == [1]
147
+
148
+ index.remove 1
149
+
150
+ books.search('Authr~').ids.should == []
151
+ end
152
+
153
+ it 'allows adding something' do
154
+ index.add Book.new(2, "Title2", "Author2")
155
+ end
156
+ it 'is findable after adding' do
157
+ books.search('Authr~').ids.should == [1]
158
+
159
+ index.add Book.new(2, "Title New", "Author New")
160
+
161
+ books.search('Authr~').ids.should == [2,1]
162
+ end
163
+
164
+ it 'allows replacing something' do
165
+ index.replace Book.new(1, "Title New", "Author New")
166
+ end
167
+ it 'is findable after replacing' do
168
+ books.search('Nuw~').ids.should == []
169
+
170
+ index.replace Book.new(1, "Title New", "Author New")
171
+
172
+ books.search('Nuw~').ids.should == [1, 1] # TODO FIXME Not really what I'd expect.
173
+ end
174
+ it 'handles more complex cases' do
175
+ books.search('Now~').ids.should == []
176
+
177
+ index.replace Book.new(1, "Title New", "Author New")
178
+
179
+ books.search('author:Now~').ids.should == [1]
180
+ end
181
+ it 'handles more complex cases' do
182
+ index.remove 1
183
+
184
+ books.search('Athr~').ids.should == []
185
+
186
+ index.replace Book.new(1, "Title New", "Author New")
187
+
188
+ books.search('author:Athr~').ids.should == [1]
189
+ end
190
+ it 'handles more complex cases' do
191
+ books.search('Athr~').ids.should == [1]
192
+
193
+ index.replace Book.new(2, "Title New", "Author New")
194
+ index.add Book.new(3, "TTL", "AUTHR")
195
+
196
+ books.search('author:Athr~').ids.should == [2, 1, 3] # TODO Is that what I'd expect?
128
197
  end
129
198
  end
130
199
 
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: 3.1.10
4
+ version: 3.1.11
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -14,7 +14,7 @@ default_executable: picky
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
17
- requirement: &70166319035880 !ruby/object:Gem::Requirement
17
+ requirement: &70264818405600 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,18 +22,18 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *70166319035880
25
+ version_requirements: *70264818405600
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: picky-client
28
- requirement: &70166319034820 !ruby/object:Gem::Requirement
28
+ requirement: &70264818404920 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - =
32
32
  - !ruby/object:Gem::Version
33
- version: 3.1.10
33
+ version: 3.1.11
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *70166319034820
36
+ version_requirements: *70264818404920
37
37
  description: Fast Ruby semantic text search engine with comfortable single field interface.
38
38
  email: florian.hanke+picky@gmail.com
39
39
  executables: