picky 3.6.16 → 4.0.0pre1
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/application.rb +1 -1
- data/lib/picky/backends/backend.rb +2 -0
- data/lib/picky/backends/memory.rb +14 -7
- data/lib/picky/backends/{memory → prepared}/text.rb +10 -4
- data/lib/picky/backends/redis/directly_manipulable.rb +3 -5
- data/lib/picky/backends/redis/list.rb +5 -1
- data/lib/picky/backends/sqlite/basic.rb +4 -2
- data/lib/picky/bundle.rb +6 -7
- data/lib/picky/bundle_indexed.rb +2 -2
- data/lib/picky/bundle_realtime.rb +8 -7
- data/lib/picky/categories.rb +0 -1
- data/lib/picky/categories_indexing.rb +14 -0
- data/lib/picky/category.rb +3 -5
- data/lib/picky/category_indexed.rb +2 -5
- data/lib/picky/category_indexing.rb +28 -16
- data/lib/picky/constants.rb +3 -1
- data/lib/picky/frontend_adapters/rack.rb +2 -2
- data/lib/picky/generators/similarity/phonetic.rb +6 -14
- data/lib/picky/generators/strategy.rb +1 -1
- data/lib/picky/generators/weights/runtime.rb +2 -2
- data/lib/picky/helpers/indexing.rb +20 -0
- data/lib/picky/index.rb +7 -10
- data/lib/picky/index_indexed.rb +1 -8
- data/lib/picky/index_indexing.rb +44 -42
- data/lib/picky/indexers/base.rb +5 -6
- data/lib/picky/indexers/parallel.rb +35 -32
- data/lib/picky/indexers/serial.rb +38 -15
- data/lib/picky/indexes_indexed.rb +0 -7
- data/lib/picky/indexes_indexing.rb +16 -19
- data/lib/picky/loader.rb +6 -4
- data/lib/picky/query/allocation.rb +7 -2
- data/lib/picky/query/combination.rb +1 -1
- data/lib/picky/query/indexes.rb +1 -1
- data/lib/picky/query/indexes_check.rb +12 -14
- data/lib/picky/query/token.rb +33 -15
- data/lib/picky/results/exact_first.rb +53 -0
- data/lib/picky/scheduler.rb +43 -0
- data/lib/picky/search.rb +0 -2
- data/lib/picky/sources/csv.rb +2 -3
- data/lib/picky/sources/db.rb +4 -3
- data/lib/picky/sources/mongo.rb +1 -1
- data/lib/picky/tokenizer.rb +0 -4
- data/lib/picky/wrappers/bundle/location.rb +1 -1
- data/lib/picky.rb +2 -2
- data/lib/tasks/index.rake +13 -14
- data/spec/functional/backends/file_spec.rb +2 -4
- data/spec/functional/backends/memory_spec.rb +2 -2
- data/spec/functional/backends/redis_spec.rb +1 -1
- data/spec/functional/exact_first_spec.rb +24 -4
- data/spec/functional/realtime_spec.rb +7 -3
- data/spec/lib/application_spec.rb +30 -30
- data/spec/lib/backends/backend_spec.rb +25 -27
- data/spec/lib/backends/{memory → prepared}/text_spec.rb +1 -1
- data/spec/lib/category_indexing_spec.rb +1 -1
- data/spec/lib/extensions/symbol_spec.rb +1 -1
- data/spec/lib/generators/similarity/phonetic_spec.rb +46 -0
- data/spec/lib/index_indexed_spec.rb +5 -5
- data/spec/lib/index_indexing_spec.rb +13 -12
- data/spec/lib/index_spec.rb +8 -8
- data/spec/lib/indexers/base_spec.rb +5 -6
- data/spec/lib/indexers/parallel_spec.rb +10 -10
- data/spec/lib/indexes_indexed_spec.rb +1 -7
- data/spec/lib/indexes_indexing_spec.rb +10 -5
- data/spec/lib/query/indexes_check_spec.rb +44 -15
- data/spec/lib/query/indexes_spec.rb +11 -11
- data/spec/lib/query/token_spec.rb +10 -0
- data/spec/lib/{indexed/wrappers → results}/exact_first_spec.rb +18 -21
- data/spec/lib/scheduler_spec.rb +92 -0
- metadata +45 -34
- data/lib/picky/cores.rb +0 -127
- data/lib/picky/tokenizers/location.rb +0 -53
- data/lib/picky/wrappers/category/exact_first.rb +0 -94
- data/spec/lib/cores_spec.rb +0 -185
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: picky
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 4.0.0pre1
|
5
|
+
prerelease: 5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Florian Hanke
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-12-
|
12
|
+
date: 2011-12-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70311745503320 !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: *70311745503320
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: picky-client
|
27
|
-
requirement: &
|
27
|
+
requirement: &70311745502640 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
32
|
+
version: 4.0.0pre1
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70311745502640
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rack
|
38
|
-
requirement: &
|
38
|
+
requirement: &70311745502040 !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: *70311745502040
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rack_fast_escape
|
49
|
-
requirement: &
|
49
|
+
requirement: &70311745501280 !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: *70311745501280
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: text
|
60
|
-
requirement: &
|
60
|
+
requirement: &70311745500860 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70311745500860
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: yajl-ruby
|
71
|
-
requirement: &
|
71
|
+
requirement: &70311745500360 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70311745500360
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: activesupport
|
82
|
-
requirement: &
|
82
|
+
requirement: &70311745499600 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,21 @@ dependencies:
|
|
87
87
|
version: '3.0'
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70311745499600
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: procrastinate
|
93
|
+
requirement: &70311745498920 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ~>
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0.4'
|
99
|
+
type: :runtime
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *70311745498920
|
91
102
|
- !ruby/object:Gem::Dependency
|
92
103
|
name: unicorn
|
93
|
-
requirement: &
|
104
|
+
requirement: &70311745498540 !ruby/object:Gem::Requirement
|
94
105
|
none: false
|
95
106
|
requirements:
|
96
107
|
- - ! '>='
|
@@ -98,10 +109,10 @@ dependencies:
|
|
98
109
|
version: '0'
|
99
110
|
type: :runtime
|
100
111
|
prerelease: false
|
101
|
-
version_requirements: *
|
112
|
+
version_requirements: *70311745498540
|
102
113
|
- !ruby/object:Gem::Dependency
|
103
114
|
name: sinatra
|
104
|
-
requirement: &
|
115
|
+
requirement: &70311745498080 !ruby/object:Gem::Requirement
|
105
116
|
none: false
|
106
117
|
requirements:
|
107
118
|
- - ! '>='
|
@@ -109,7 +120,7 @@ dependencies:
|
|
109
120
|
version: '0'
|
110
121
|
type: :runtime
|
111
122
|
prerelease: false
|
112
|
-
version_requirements: *
|
123
|
+
version_requirements: *70311745498080
|
113
124
|
description: Fast Ruby semantic text search engine with comfortable single field interface.
|
114
125
|
email: florian.hanke+picky@gmail.com
|
115
126
|
executables:
|
@@ -135,8 +146,8 @@ files:
|
|
135
146
|
- lib/picky/backends/memory/basic.rb
|
136
147
|
- lib/picky/backends/memory/json.rb
|
137
148
|
- lib/picky/backends/memory/marshal.rb
|
138
|
-
- lib/picky/backends/memory/text.rb
|
139
149
|
- lib/picky/backends/memory.rb
|
150
|
+
- lib/picky/backends/prepared/text.rb
|
140
151
|
- lib/picky/backends/redis/basic.rb
|
141
152
|
- lib/picky/backends/redis/directly_manipulable.rb
|
142
153
|
- lib/picky/backends/redis/float.rb
|
@@ -168,7 +179,6 @@ files:
|
|
168
179
|
- lib/picky/character_substituters/west_european.rb
|
169
180
|
- lib/picky/console.rb
|
170
181
|
- lib/picky/constants.rb
|
171
|
-
- lib/picky/cores.rb
|
172
182
|
- lib/picky/deployment.rb
|
173
183
|
- lib/picky/ext/maybe_compile.rb
|
174
184
|
- lib/picky/ext/ruby19/extconf.rb
|
@@ -201,6 +211,7 @@ files:
|
|
201
211
|
- lib/picky/generators/weights/logarithmic.rb
|
202
212
|
- lib/picky/generators/weights/runtime.rb
|
203
213
|
- lib/picky/generators/weights/strategy.rb
|
214
|
+
- lib/picky/helpers/indexing.rb
|
204
215
|
- lib/picky/helpers/measuring.rb
|
205
216
|
- lib/picky/index.rb
|
206
217
|
- lib/picky/index_convenience.rb
|
@@ -229,7 +240,9 @@ files:
|
|
229
240
|
- lib/picky/query/tokens.rb
|
230
241
|
- lib/picky/query/weights.rb
|
231
242
|
- lib/picky/rack/harakiri.rb
|
243
|
+
- lib/picky/results/exact_first.rb
|
232
244
|
- lib/picky/results.rb
|
245
|
+
- lib/picky/scheduler.rb
|
233
246
|
- lib/picky/search.rb
|
234
247
|
- lib/picky/sinatra.rb
|
235
248
|
- lib/picky/sources/base.rb
|
@@ -241,13 +254,11 @@ files:
|
|
241
254
|
- lib/picky/statistics.rb
|
242
255
|
- lib/picky/tasks.rb
|
243
256
|
- lib/picky/tokenizer.rb
|
244
|
-
- lib/picky/tokenizers/location.rb
|
245
257
|
- lib/picky/wrappers/bundle/calculation.rb
|
246
258
|
- lib/picky/wrappers/bundle/delegators.rb
|
247
259
|
- lib/picky/wrappers/bundle/exact_partial.rb
|
248
260
|
- lib/picky/wrappers/bundle/location.rb
|
249
261
|
- lib/picky/wrappers/bundle/wrapper.rb
|
250
|
-
- lib/picky/wrappers/category/exact_first.rb
|
251
262
|
- lib/picky/wrappers/category/location.rb
|
252
263
|
- lib/picky.rb
|
253
264
|
- lib/tasks/try.rb
|
@@ -289,8 +300,8 @@ files:
|
|
289
300
|
- spec/lib/backends/memory/basic_spec.rb
|
290
301
|
- spec/lib/backends/memory/json_spec.rb
|
291
302
|
- spec/lib/backends/memory/marshal_spec.rb
|
292
|
-
- spec/lib/backends/memory/text_spec.rb
|
293
303
|
- spec/lib/backends/memory_spec.rb
|
304
|
+
- spec/lib/backends/prepared/text_spec.rb
|
294
305
|
- spec/lib/backends/redis/basic_spec.rb
|
295
306
|
- spec/lib/backends/redis/directly_manipulable_spec.rb
|
296
307
|
- spec/lib/backends/redis/float_spec.rb
|
@@ -309,7 +320,6 @@ files:
|
|
309
320
|
- spec/lib/category_indexing_spec.rb
|
310
321
|
- spec/lib/category_spec.rb
|
311
322
|
- spec/lib/character_substituters/west_european_spec.rb
|
312
|
-
- spec/lib/cores_spec.rb
|
313
323
|
- spec/lib/extensions/array_spec.rb
|
314
324
|
- spec/lib/extensions/hash_spec.rb
|
315
325
|
- spec/lib/extensions/module_spec.rb
|
@@ -341,7 +351,6 @@ files:
|
|
341
351
|
- spec/lib/indexed/bundle_spec.rb
|
342
352
|
- spec/lib/indexed/wrappers/bundle/calculation_spec.rb
|
343
353
|
- spec/lib/indexed/wrappers/bundle/wrapper_spec.rb
|
344
|
-
- spec/lib/indexed/wrappers/exact_first_spec.rb
|
345
354
|
- spec/lib/indexers/base_spec.rb
|
346
355
|
- spec/lib/indexers/parallel_spec.rb
|
347
356
|
- spec/lib/indexers/serial_spec.rb
|
@@ -365,7 +374,9 @@ files:
|
|
365
374
|
- spec/lib/query/tokens_spec.rb
|
366
375
|
- spec/lib/query/weights_spec.rb
|
367
376
|
- spec/lib/rack/harakiri_spec.rb
|
377
|
+
- spec/lib/results/exact_first_spec.rb
|
368
378
|
- spec/lib/results_spec.rb
|
379
|
+
- spec/lib/scheduler_spec.rb
|
369
380
|
- spec/lib/search_spec.rb
|
370
381
|
- spec/lib/sinatra_spec.rb
|
371
382
|
- spec/lib/solr/schema_generator_spec.rb
|
@@ -394,9 +405,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
394
405
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
395
406
|
none: false
|
396
407
|
requirements:
|
397
|
-
- - ! '
|
408
|
+
- - ! '>'
|
398
409
|
- !ruby/object:Gem::Version
|
399
|
-
version:
|
410
|
+
version: 1.3.1
|
400
411
|
requirements: []
|
401
412
|
rubyforge_project: http://rubyforge.org/projects/picky
|
402
413
|
rubygems_version: 1.8.11
|
@@ -433,8 +444,8 @@ test_files:
|
|
433
444
|
- spec/lib/backends/memory/basic_spec.rb
|
434
445
|
- spec/lib/backends/memory/json_spec.rb
|
435
446
|
- spec/lib/backends/memory/marshal_spec.rb
|
436
|
-
- spec/lib/backends/memory/text_spec.rb
|
437
447
|
- spec/lib/backends/memory_spec.rb
|
448
|
+
- spec/lib/backends/prepared/text_spec.rb
|
438
449
|
- spec/lib/backends/redis/basic_spec.rb
|
439
450
|
- spec/lib/backends/redis/directly_manipulable_spec.rb
|
440
451
|
- spec/lib/backends/redis/float_spec.rb
|
@@ -453,7 +464,6 @@ test_files:
|
|
453
464
|
- spec/lib/category_indexing_spec.rb
|
454
465
|
- spec/lib/category_spec.rb
|
455
466
|
- spec/lib/character_substituters/west_european_spec.rb
|
456
|
-
- spec/lib/cores_spec.rb
|
457
467
|
- spec/lib/extensions/array_spec.rb
|
458
468
|
- spec/lib/extensions/hash_spec.rb
|
459
469
|
- spec/lib/extensions/module_spec.rb
|
@@ -485,7 +495,6 @@ test_files:
|
|
485
495
|
- spec/lib/indexed/bundle_spec.rb
|
486
496
|
- spec/lib/indexed/wrappers/bundle/calculation_spec.rb
|
487
497
|
- spec/lib/indexed/wrappers/bundle/wrapper_spec.rb
|
488
|
-
- spec/lib/indexed/wrappers/exact_first_spec.rb
|
489
498
|
- spec/lib/indexers/base_spec.rb
|
490
499
|
- spec/lib/indexers/parallel_spec.rb
|
491
500
|
- spec/lib/indexers/serial_spec.rb
|
@@ -509,7 +518,9 @@ test_files:
|
|
509
518
|
- spec/lib/query/tokens_spec.rb
|
510
519
|
- spec/lib/query/weights_spec.rb
|
511
520
|
- spec/lib/rack/harakiri_spec.rb
|
521
|
+
- spec/lib/results/exact_first_spec.rb
|
512
522
|
- spec/lib/results_spec.rb
|
523
|
+
- spec/lib/scheduler_spec.rb
|
513
524
|
- spec/lib/search_spec.rb
|
514
525
|
- spec/lib/sinatra_spec.rb
|
515
526
|
- spec/lib/solr/schema_generator_spec.rb
|
data/lib/picky/cores.rb
DELETED
@@ -1,127 +0,0 @@
|
|
1
|
-
module Picky
|
2
|
-
|
3
|
-
Infinity = 1.0/0
|
4
|
-
|
5
|
-
# Handles processing over multiple cores.
|
6
|
-
#
|
7
|
-
class Cores # :nodoc:all
|
8
|
-
|
9
|
-
# Pass it an ary.
|
10
|
-
#
|
11
|
-
# ary = (1..10).to_a
|
12
|
-
# forked ary, :max => 5 do |element|
|
13
|
-
#
|
14
|
-
# end
|
15
|
-
#
|
16
|
-
# Options include:
|
17
|
-
# * max: Maximum # of processors to use. Default is all it can get.
|
18
|
-
# * amount: An exactly defined amount of processors to use.
|
19
|
-
# * randomly: Whether to use random order or not.
|
20
|
-
#
|
21
|
-
def self.forked elements, options = {}, &block
|
22
|
-
return if elements.empty?
|
23
|
-
raise "Block argument needed when running Cores.forked" unless block_given?
|
24
|
-
|
25
|
-
# Note: Not using a generator because Enumerator#each
|
26
|
-
# is exhibiting problems in some Rubies on some OSs
|
27
|
-
# (see e.g. http://redmine.ruby-lang.org/issues/5003).
|
28
|
-
#
|
29
|
-
elements = elements.dup
|
30
|
-
elements = elements.sort_by { rand } if options[:randomly]
|
31
|
-
|
32
|
-
# Get the maximum number of processors.
|
33
|
-
#
|
34
|
-
max = max_processors options
|
35
|
-
|
36
|
-
# Decide whether to use forking.
|
37
|
-
#
|
38
|
-
if fork?(max)
|
39
|
-
processing = 0
|
40
|
-
|
41
|
-
loop do
|
42
|
-
while processing < max
|
43
|
-
# Get the next element
|
44
|
-
#
|
45
|
-
element = elements.shift
|
46
|
-
break unless element
|
47
|
-
processing += 1
|
48
|
-
|
49
|
-
# Fork and yield.
|
50
|
-
#
|
51
|
-
Process.fork do
|
52
|
-
sleep 0.05*processing
|
53
|
-
block.call element
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
# Block and wait for any child to finish.
|
58
|
-
#
|
59
|
-
begin
|
60
|
-
Process.wait 0
|
61
|
-
rescue Errno::ECHILD => e
|
62
|
-
break
|
63
|
-
ensure
|
64
|
-
processing -= 1
|
65
|
-
end
|
66
|
-
end
|
67
|
-
else
|
68
|
-
elements.each &block
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|
72
|
-
|
73
|
-
# Do not fork if there is just one processor,
|
74
|
-
# or as in Windows, if there isn't the
|
75
|
-
# possibility of forking.
|
76
|
-
#
|
77
|
-
def self.fork? max_processors
|
78
|
-
max_processors > 1 && Process.respond_to?(:fork)
|
79
|
-
end
|
80
|
-
|
81
|
-
# Return the number of maximum usable processors.
|
82
|
-
#
|
83
|
-
# Options
|
84
|
-
# max: The maximum amount of cores used.
|
85
|
-
#
|
86
|
-
def self.max_processors options = {}
|
87
|
-
options[:amount] || [number_of_cores, (options[:max] || Infinity)].min
|
88
|
-
end
|
89
|
-
|
90
|
-
# Gets the number of cores depending on OS.
|
91
|
-
#
|
92
|
-
def self.number_of_cores
|
93
|
-
extract_cores_for actual_platform
|
94
|
-
end
|
95
|
-
# Extracts the platform os from the platform.
|
96
|
-
#
|
97
|
-
# Note: Could also use 'rbconfig'.
|
98
|
-
#
|
99
|
-
def self.actual_platform
|
100
|
-
matched = platform.match(/-\b([a-z]*)/)
|
101
|
-
matched && matched[1]
|
102
|
-
end
|
103
|
-
# Returns a mapping
|
104
|
-
# os_name => lambda_which_returns_a_number_of_cores
|
105
|
-
#
|
106
|
-
@@number_of_cores = {
|
107
|
-
'darwin' => lambda { `system_profiler SPHardwareDataType | grep -i 'Total Number [oO]f Cores'`.gsub(/[^\d]/, '') },
|
108
|
-
'linux' => lambda { `grep -ci ^processor /proc/cpuinfo` }
|
109
|
-
}
|
110
|
-
def self.os_to_core_mapping
|
111
|
-
@@number_of_cores
|
112
|
-
end
|
113
|
-
# Extracts the number of cores for the given os name.
|
114
|
-
#
|
115
|
-
# Note: Default is 1.
|
116
|
-
#
|
117
|
-
def self.extract_cores_for os
|
118
|
-
code_to_execute = os_to_core_mapping[os]
|
119
|
-
code_to_execute && code_to_execute.call.to_i || 1
|
120
|
-
end
|
121
|
-
def self.platform
|
122
|
-
RUBY_PLATFORM
|
123
|
-
end
|
124
|
-
|
125
|
-
end
|
126
|
-
|
127
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
module Picky
|
2
|
-
|
3
|
-
module Tokenizers
|
4
|
-
|
5
|
-
class Location < Picky::Tokenizer # TODO Still needed?
|
6
|
-
|
7
|
-
attr_reader :calculation
|
8
|
-
|
9
|
-
def initialize options = {}
|
10
|
-
super options
|
11
|
-
|
12
|
-
grid = options[:grid]
|
13
|
-
precision = options[:precision] || 1
|
14
|
-
|
15
|
-
@calculation = Calculations::Location.new grid, precision
|
16
|
-
|
17
|
-
@minimum = 1.0 / 0
|
18
|
-
|
19
|
-
@locations = []
|
20
|
-
end
|
21
|
-
|
22
|
-
#
|
23
|
-
#
|
24
|
-
def tokenize text
|
25
|
-
|
26
|
-
# Gather min/max.
|
27
|
-
#
|
28
|
-
source.harvest category do |indexed_id, location|
|
29
|
-
location = location.to_f
|
30
|
-
minimum = location if location < minimum
|
31
|
-
locations << [indexed_id, location]
|
32
|
-
end
|
33
|
-
|
34
|
-
calculation.minimum = minimum
|
35
|
-
|
36
|
-
# Recalculate locations.
|
37
|
-
#
|
38
|
-
locations.each do |indexed_id, location|
|
39
|
-
calculation.recalculated_range(location).each do |new_location|
|
40
|
-
yield indexed_id, new_location.to_s
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
# TODO Move to the right place.
|
45
|
-
#
|
46
|
-
category.exact[:location_minimum] = minimum
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
@@ -1,94 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
module Picky
|
4
|
-
|
5
|
-
module Wrappers
|
6
|
-
|
7
|
-
module Category
|
8
|
-
|
9
|
-
# This index combines an exact and partial index.
|
10
|
-
# It serves to order the results such that exact hits are found first.
|
11
|
-
#
|
12
|
-
class ExactFirst
|
13
|
-
|
14
|
-
# TODO Refactor!
|
15
|
-
#
|
16
|
-
delegate :add,
|
17
|
-
:qualifiers,
|
18
|
-
:exact,
|
19
|
-
:partial,
|
20
|
-
:replace,
|
21
|
-
|
22
|
-
:identifier,
|
23
|
-
:name,
|
24
|
-
|
25
|
-
:index,
|
26
|
-
:category,
|
27
|
-
:dump,
|
28
|
-
:load,
|
29
|
-
|
30
|
-
:empty,
|
31
|
-
:prepared_index_file,
|
32
|
-
:tokenizer,
|
33
|
-
:cache,
|
34
|
-
:from,
|
35
|
-
|
36
|
-
:bundle_for,
|
37
|
-
:build_realtime_mapping,
|
38
|
-
|
39
|
-
:to => :@category
|
40
|
-
|
41
|
-
def initialize category
|
42
|
-
@category = category
|
43
|
-
@exact = category.exact
|
44
|
-
@partial = category.partial
|
45
|
-
end
|
46
|
-
|
47
|
-
def self.wrap index_or_category
|
48
|
-
if index_or_category.respond_to? :categories
|
49
|
-
wrap_each_of index_or_category.categories
|
50
|
-
index_or_category
|
51
|
-
else
|
52
|
-
new index_or_category
|
53
|
-
end
|
54
|
-
end
|
55
|
-
def self.wrap_each_of categories
|
56
|
-
actual_categories = categories.categories
|
57
|
-
categories.clear_categories
|
58
|
-
|
59
|
-
actual_categories.each do |category|
|
60
|
-
categories << new(category)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def ids token
|
65
|
-
text = token.text
|
66
|
-
if token.partial?
|
67
|
-
@exact.ids(text) | @partial.ids(text)
|
68
|
-
else
|
69
|
-
@exact.ids text
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def weight token
|
74
|
-
text = token.text
|
75
|
-
if token.partial?
|
76
|
-
[@exact.weight(text), @partial.weight(text)].compact.max
|
77
|
-
else
|
78
|
-
@exact.weight text
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
# TODO Refactor! (Subclass Picky::Category?)
|
83
|
-
#
|
84
|
-
def combination_for token
|
85
|
-
weight(token) && Query::Combination.new(token, self)
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
91
|
-
|
92
|
-
end
|
93
|
-
|
94
|
-
end
|