picky 2.7.0 → 3.0.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (213) hide show
  1. data/lib/picky/adapters/rack/base.rb +20 -16
  2. data/lib/picky/adapters/rack/live_parameters.rb +28 -24
  3. data/lib/picky/adapters/rack/search.rb +67 -0
  4. data/lib/picky/adapters/rack.rb +27 -23
  5. data/lib/picky/application.rb +246 -236
  6. data/lib/picky/backend/base.rb +115 -119
  7. data/lib/picky/backend/file/basic.rb +102 -98
  8. data/lib/picky/backend/file/json.rb +27 -23
  9. data/lib/picky/backend/file/marshal.rb +32 -28
  10. data/lib/picky/backend/file/text.rb +45 -41
  11. data/lib/picky/backend/files.rb +19 -15
  12. data/lib/picky/backend/redis/basic.rb +76 -72
  13. data/lib/picky/backend/redis/list_hash.rb +40 -36
  14. data/lib/picky/backend/redis/string_hash.rb +30 -26
  15. data/lib/picky/backend/redis.rb +32 -28
  16. data/lib/picky/bundle.rb +82 -57
  17. data/lib/{bundling.rb → picky/bundling.rb} +0 -0
  18. data/lib/picky/calculations/location.rb +51 -47
  19. data/lib/picky/categories.rb +60 -56
  20. data/lib/picky/categories_indexed.rb +73 -82
  21. data/lib/picky/categories_indexing.rb +12 -8
  22. data/lib/picky/category.rb +109 -120
  23. data/lib/picky/category_indexed.rb +39 -41
  24. data/lib/picky/category_indexing.rb +123 -125
  25. data/lib/picky/character_substituters/west_european.rb +32 -26
  26. data/lib/{constants.rb → picky/constants.rb} +0 -0
  27. data/lib/picky/cores.rb +96 -92
  28. data/lib/{deployment.rb → picky/deployment.rb} +0 -0
  29. data/lib/picky/frontend_adapters/rack.rb +133 -118
  30. data/lib/picky/generators/aliases.rb +5 -3
  31. data/lib/picky/generators/base.rb +11 -7
  32. data/lib/picky/generators/partial/default.rb +7 -3
  33. data/lib/picky/generators/partial/none.rb +24 -20
  34. data/lib/picky/generators/partial/strategy.rb +20 -16
  35. data/lib/picky/generators/partial/substring.rb +94 -90
  36. data/lib/picky/generators/partial_generator.rb +11 -7
  37. data/lib/picky/generators/similarity/default.rb +9 -5
  38. data/lib/picky/generators/similarity/double_metaphone.rb +20 -16
  39. data/lib/picky/generators/similarity/metaphone.rb +20 -16
  40. data/lib/picky/generators/similarity/none.rb +23 -19
  41. data/lib/picky/generators/similarity/phonetic.rb +49 -45
  42. data/lib/picky/generators/similarity/soundex.rb +20 -16
  43. data/lib/picky/generators/similarity/strategy.rb +10 -6
  44. data/lib/picky/generators/similarity_generator.rb +11 -7
  45. data/lib/picky/generators/strategy.rb +14 -10
  46. data/lib/picky/generators/weights/default.rb +9 -5
  47. data/lib/picky/generators/weights/logarithmic.rb +30 -26
  48. data/lib/picky/generators/weights/strategy.rb +10 -6
  49. data/lib/picky/generators/weights_generator.rb +11 -7
  50. data/lib/picky/helpers/measuring.rb +20 -16
  51. data/lib/picky/indexed/bundle/base.rb +39 -37
  52. data/lib/picky/indexed/bundle/memory.rb +68 -64
  53. data/lib/picky/indexed/bundle/redis.rb +73 -69
  54. data/lib/picky/indexed/wrappers/bundle/calculation.rb +26 -22
  55. data/lib/picky/indexed/wrappers/bundle/location.rb +30 -26
  56. data/lib/picky/indexed/wrappers/bundle/wrapper.rb +36 -32
  57. data/lib/picky/indexed/wrappers/category/location.rb +17 -13
  58. data/lib/picky/indexed/wrappers/exact_first.rb +46 -42
  59. data/lib/picky/indexers/base.rb +26 -22
  60. data/lib/picky/indexers/parallel.rb +62 -58
  61. data/lib/picky/indexers/serial.rb +41 -37
  62. data/lib/picky/indexes/index.rb +400 -0
  63. data/lib/picky/indexes/index_indexed.rb +24 -0
  64. data/lib/picky/indexes/index_indexing.rb +138 -0
  65. data/lib/picky/indexes/memory.rb +20 -0
  66. data/lib/picky/indexes/redis.rb +20 -0
  67. data/lib/picky/indexes.rb +68 -61
  68. data/lib/picky/indexes_indexed.rb +16 -12
  69. data/lib/picky/indexes_indexing.rb +41 -37
  70. data/lib/picky/indexing/bundle/base.rb +216 -205
  71. data/lib/picky/indexing/bundle/memory.rb +16 -11
  72. data/lib/picky/indexing/bundle/redis.rb +14 -12
  73. data/lib/picky/indexing/wrappers/category/location.rb +17 -13
  74. data/lib/picky/interfaces/live_parameters.rb +159 -154
  75. data/lib/picky/loader.rb +267 -304
  76. data/lib/picky/loggers/search.rb +20 -13
  77. data/lib/picky/no_source_specified_exception.rb +7 -3
  78. data/lib/picky/performant.rb +6 -2
  79. data/lib/picky/query/allocation.rb +71 -67
  80. data/lib/picky/query/allocations.rb +99 -94
  81. data/lib/picky/query/combination.rb +70 -66
  82. data/lib/picky/query/combinations/base.rb +56 -52
  83. data/lib/picky/query/combinations/memory.rb +36 -32
  84. data/lib/picky/query/combinations/redis.rb +66 -62
  85. data/lib/picky/query/indexes.rb +175 -160
  86. data/lib/picky/query/qualifier_category_mapper.rb +43 -0
  87. data/lib/picky/query/token.rb +165 -172
  88. data/lib/picky/query/tokens.rb +86 -82
  89. data/lib/picky/query/weights.rb +44 -48
  90. data/lib/picky/query.rb +5 -1
  91. data/lib/picky/rack/harakiri.rb +51 -47
  92. data/lib/picky/results.rb +81 -77
  93. data/lib/picky/search.rb +169 -158
  94. data/lib/picky/sinatra.rb +34 -0
  95. data/lib/picky/sources/base.rb +73 -70
  96. data/lib/picky/sources/couch.rb +61 -57
  97. data/lib/picky/sources/csv.rb +68 -64
  98. data/lib/picky/sources/db.rb +139 -135
  99. data/lib/picky/sources/delicious.rb +52 -48
  100. data/lib/picky/sources/mongo.rb +68 -63
  101. data/lib/picky/sources/wrappers/base.rb +20 -16
  102. data/lib/picky/sources/wrappers/location.rb +37 -33
  103. data/lib/picky/statistics.rb +46 -43
  104. data/lib/picky/tasks.rb +3 -0
  105. data/lib/picky/tokenizers/base.rb +192 -187
  106. data/lib/picky/tokenizers/index.rb +25 -21
  107. data/lib/picky/tokenizers/location.rb +33 -29
  108. data/lib/picky/tokenizers/query.rb +49 -43
  109. data/lib/picky.rb +21 -13
  110. data/lib/tasks/application.rake +1 -1
  111. data/lib/tasks/index.rake +3 -3
  112. data/lib/tasks/routes.rake +1 -1
  113. data/lib/tasks/server.rake +1 -1
  114. data/spec/lib/adapters/rack/base_spec.rb +1 -1
  115. data/spec/lib/adapters/rack/live_parameters_spec.rb +1 -1
  116. data/spec/lib/adapters/rack/query_spec.rb +1 -1
  117. data/spec/lib/application_spec.rb +39 -32
  118. data/spec/lib/backend/file/basic_spec.rb +2 -2
  119. data/spec/lib/backend/file/json_spec.rb +2 -2
  120. data/spec/lib/backend/file/marshal_spec.rb +2 -2
  121. data/spec/lib/backend/file/text_spec.rb +1 -1
  122. data/spec/lib/backend/files_spec.rb +14 -24
  123. data/spec/lib/backend/redis/basic_spec.rb +2 -2
  124. data/spec/lib/backend/redis/list_hash_spec.rb +3 -3
  125. data/spec/lib/backend/redis/string_hash_spec.rb +3 -3
  126. data/spec/lib/backend/redis_spec.rb +20 -13
  127. data/spec/lib/calculations/location_spec.rb +1 -1
  128. data/spec/lib/categories_indexed_spec.rb +16 -34
  129. data/spec/lib/category_indexed_spec.rb +9 -27
  130. data/spec/lib/category_indexing_spec.rb +2 -3
  131. data/spec/lib/category_spec.rb +10 -10
  132. data/spec/lib/character_substituters/west_european_spec.rb +6 -5
  133. data/spec/lib/cores_spec.rb +17 -17
  134. data/spec/lib/extensions/symbol_spec.rb +15 -1
  135. data/spec/lib/frontend_adapters/rack_spec.rb +20 -20
  136. data/spec/lib/generators/aliases_spec.rb +3 -3
  137. data/spec/lib/generators/cacher_strategy_spec.rb +1 -1
  138. data/spec/lib/generators/partial/default_spec.rb +3 -3
  139. data/spec/lib/generators/partial/none_spec.rb +2 -2
  140. data/spec/lib/generators/partial/substring_spec.rb +1 -1
  141. data/spec/lib/generators/partial_generator_spec.rb +3 -3
  142. data/spec/lib/generators/similarity/double_metaphone_spec.rb +1 -1
  143. data/spec/lib/generators/similarity/metaphone_spec.rb +1 -1
  144. data/spec/lib/generators/similarity/none_spec.rb +1 -1
  145. data/spec/lib/generators/similarity/phonetic_spec.rb +1 -1
  146. data/spec/lib/generators/similarity/soundex_spec.rb +1 -1
  147. data/spec/lib/generators/similarity_generator_spec.rb +2 -2
  148. data/spec/lib/generators/weights/logarithmic_spec.rb +1 -1
  149. data/spec/lib/generators/weights_generator_spec.rb +1 -1
  150. data/spec/lib/helpers/measuring_spec.rb +2 -2
  151. data/spec/lib/indexed/bundle/memory_spec.rb +6 -6
  152. data/spec/lib/indexed/bundle/redis_spec.rb +4 -4
  153. data/spec/lib/indexed/wrappers/bundle/calculation_spec.rb +2 -3
  154. data/spec/lib/indexed/wrappers/bundle/wrapper_spec.rb +2 -2
  155. data/spec/lib/indexed/wrappers/exact_first_spec.rb +5 -5
  156. data/spec/lib/indexers/base_spec.rb +1 -1
  157. data/spec/lib/indexers/parallel_spec.rb +1 -1
  158. data/spec/lib/indexers/serial_spec.rb +1 -1
  159. data/spec/lib/{index/base_indexed_spec.rb → indexes/index_indexed_spec.rb} +3 -3
  160. data/spec/lib/{index/base_indexing_spec.rb → indexes/index_indexing_spec.rb} +19 -2
  161. data/spec/lib/{index/base_spec.rb → indexes/index_spec.rb} +6 -25
  162. data/spec/lib/{index → indexes}/redis_spec.rb +1 -1
  163. data/spec/lib/indexes_class_spec.rb +2 -2
  164. data/spec/lib/indexes_indexed_spec.rb +1 -1
  165. data/spec/lib/indexes_indexing_spec.rb +1 -1
  166. data/spec/lib/indexes_spec.rb +1 -1
  167. data/spec/lib/indexing/bundle/base_spec.rb +7 -5
  168. data/spec/lib/indexing/bundle/memory_partial_generation_speed_spec.rb +4 -4
  169. data/spec/lib/indexing/bundle/memory_spec.rb +15 -15
  170. data/spec/lib/indexing/bundle/redis_spec.rb +9 -9
  171. data/spec/lib/interfaces/live_parameters_spec.rb +5 -5
  172. data/spec/lib/loader_spec.rb +17 -19
  173. data/spec/lib/loggers/search_spec.rb +2 -2
  174. data/spec/lib/query/allocation_spec.rb +1 -1
  175. data/spec/lib/query/allocations_spec.rb +1 -1
  176. data/spec/lib/query/combination_spec.rb +4 -4
  177. data/spec/lib/query/combinations/base_spec.rb +1 -1
  178. data/spec/lib/query/combinations/memory_spec.rb +1 -1
  179. data/spec/lib/query/combinations/redis_spec.rb +1 -1
  180. data/spec/lib/query/indexes_spec.rb +7 -2
  181. data/spec/lib/query/qualifier_category_mapper_spec.rb +34 -0
  182. data/spec/lib/query/token_spec.rb +32 -53
  183. data/spec/lib/query/tokens_spec.rb +30 -35
  184. data/spec/lib/query/weights_spec.rb +16 -16
  185. data/spec/lib/rack/harakiri_spec.rb +5 -5
  186. data/spec/lib/results_spec.rb +1 -1
  187. data/spec/lib/search_spec.rb +24 -22
  188. data/spec/lib/sinatra_spec.rb +36 -0
  189. data/spec/lib/sources/base_spec.rb +1 -1
  190. data/spec/lib/sources/couch_spec.rb +9 -9
  191. data/spec/lib/sources/csv_spec.rb +7 -7
  192. data/spec/lib/sources/db_spec.rb +2 -2
  193. data/spec/lib/sources/delicious_spec.rb +5 -5
  194. data/spec/lib/sources/mongo_spec.rb +7 -7
  195. data/spec/lib/sources/wrappers/base_spec.rb +2 -2
  196. data/spec/lib/sources/wrappers/location_spec.rb +1 -1
  197. data/spec/lib/statistics_spec.rb +1 -1
  198. data/spec/lib/tokenizers/base_spec.rb +2 -2
  199. data/spec/lib/tokenizers/index_spec.rb +1 -1
  200. data/spec/lib/tokenizers/query_spec.rb +1 -1
  201. metadata +30 -30
  202. data/lib/picky/adapters/rack/query.rb +0 -65
  203. data/lib/picky/index/base.rb +0 -409
  204. data/lib/picky/index/base_indexed.rb +0 -29
  205. data/lib/picky/index/base_indexing.rb +0 -127
  206. data/lib/picky/index/memory.rb +0 -16
  207. data/lib/picky/index/redis.rb +0 -16
  208. data/lib/picky/query/qualifiers.rb +0 -76
  209. data/lib/picky/query/solr.rb +0 -60
  210. data/lib/picky/signals.rb +0 -8
  211. data/lib/picky-tasks.rb +0 -6
  212. data/lib/tasks/spec.rake +0 -11
  213. data/spec/lib/query/qualifiers_spec.rb +0 -31
@@ -1,227 +1,238 @@
1
- module Indexing # :nodoc:all
2
-
3
- # A Bundle is a number of indexes
4
- # per [index, category] combination.
5
- #
6
- # At most, there are three indexes:
7
- # * *core* index (always used)
8
- # * *weights* index (always used)
9
- # * *similarity* index (used with similarity)
10
- #
11
- # In Picky, indexing is separated from the index
12
- # handling itself through a parallel structure.
13
- #
14
- # Both use methods provided by this base class, but
15
- # have very different goals:
16
- #
17
- # * *Indexing*::*Bundle* is just concerned with creating index files
18
- # and providing helper functions to e.g. check the indexes.
19
- #
20
- # * *Index*::*Bundle* is concerned with loading these index files into
21
- # memory and looking up search data as fast as possible.
22
- #
23
- module Bundle
24
-
25
- # This is the indexing bundle.
1
+ module Picky
2
+
3
+ module Indexing # :nodoc:all
4
+
5
+ # A Bundle is a number of indexes
6
+ # per [index, category] combination.
7
+ #
8
+ # At most, there are three indexes:
9
+ # * *core* index (always used)
10
+ # * *weights* index (always used)
11
+ # * *similarity* index (used with similarity)
12
+ #
13
+ # In Picky, indexing is separated from the index
14
+ # handling itself through a parallel structure.
15
+ #
16
+ # Both use methods provided by this base class, but
17
+ # have very different goals:
18
+ #
19
+ # * *Indexing*::*Bundle* is just concerned with creating index files
20
+ # and providing helper functions to e.g. check the indexes.
26
21
  #
27
- # It does all menial tasks that have nothing to do
28
- # with the actual index running etc.
22
+ # * *Index*::*Bundle* is concerned with loading these index files into
23
+ # memory and looking up search data as fast as possible.
29
24
  #
30
- class Base < ::Bundle
25
+ module Bundle
31
26
 
32
- attr_accessor :partial_strategy,
33
- :weights_strategy
27
+ # This is the indexing bundle.
28
+ #
29
+ # It does all menial tasks that have nothing to do
30
+ # with the actual index running etc.
31
+ #
32
+ class Base < Picky::Bundle
34
33
 
35
- def initialize name, category, weights_strategy, partial_strategy, similarity_strategy
36
- super name, category, similarity_strategy
34
+ attr_reader :backend,
35
+ :prepared
37
36
 
38
- @weights_strategy = weights_strategy
39
- @partial_strategy = partial_strategy
40
- end
37
+ attr_accessor :partial_strategy,
38
+ :weights_strategy
41
39
 
42
- # Sets up a piece of the index for the given token.
43
- #
44
- def initialize_inverted_index_for token
45
- self.inverted[token] ||= []
46
- end
40
+ def initialize name, category, weights_strategy, partial_strategy, similarity_strategy, options = {}
41
+ super name, category, similarity_strategy, options
47
42
 
48
- # Generation
49
- #
43
+ @weights_strategy = weights_strategy
44
+ @partial_strategy = partial_strategy
45
+ @key_format = options[:key_format]
46
+ @prepared = Backend::File::Text.new category.prepared_index_path
47
+ end
50
48
 
51
- # This method
52
- # * Loads the base index from the "prepared..." file.
53
- # * Generates derived indexes.
54
- # * Dumps all the indexes into files.
55
- #
56
- def generate_caches_from_source
57
- load_from_prepared_index_file
58
- generate_caches_from_memory
59
- end
60
- # Generates derived indexes from the index and dumps.
61
- #
62
- # Note: assumes that there is something in the index
63
- #
64
- def generate_caches_from_memory
65
- cache_from_memory_generation_message
66
- generate_derived
67
- end
68
- def cache_from_memory_generation_message
69
- timed_exclaim %Q{"#{identifier}": Caching from intermediate in-memory index.}
70
- end
49
+ # Sets up a piece of the index for the given token.
50
+ #
51
+ def initialize_inverted_index_for token
52
+ self.inverted[token] ||= []
53
+ end
71
54
 
72
- # Generates the weights and similarity from the main index.
73
- #
74
- def generate_derived
75
- generate_weights
76
- generate_similarity
77
- end
55
+ # Generation
56
+ #
57
+
58
+ # This method
59
+ # * Loads the base index from the "prepared..." file.
60
+ # * Generates derived indexes.
61
+ # * Dumps all the indexes into files.
62
+ #
63
+ def generate_caches_from_source
64
+ load_from_prepared_index_file
65
+ generate_caches_from_memory
66
+ end
67
+ # Generates derived indexes from the index and dumps.
68
+ #
69
+ # Note: assumes that there is something in the index
70
+ #
71
+ def generate_caches_from_memory
72
+ cache_from_memory_generation_message
73
+ generate_derived
74
+ end
75
+ def cache_from_memory_generation_message
76
+ timed_exclaim %Q{"#{identifier}": Caching from intermediate in-memory index.}
77
+ end
78
78
 
79
- # Load the data from the db.
80
- #
81
- def load_from_prepared_index_file
82
- load_from_prepared_index_generation_message
83
- clear
84
- retrieve
85
- end
86
- def load_from_prepared_index_generation_message
87
- timed_exclaim %Q{"#{identifier}": Loading prepared data into memory.}
88
- end
89
- # Retrieves the prepared index data into the index.
90
- #
91
- # This is in preparation for generating
92
- # derived indexes (like weights, similarity)
93
- # and later dumping the optimized index.
94
- #
95
- def retrieve
96
- key_format = self[:key_format] || :to_i
97
- files.retrieve do |id, token|
98
- initialize_inverted_index_for token
99
- self.inverted[token] << id.send(key_format)
79
+ # Generates the weights and similarity from the main index.
80
+ #
81
+ def generate_derived
82
+ generate_weights
83
+ generate_similarity
100
84
  end
101
- end
102
85
 
103
- # Generates a new index (writes its index) using the
104
- # partial caching strategy of this bundle.
105
- #
106
- def generate_partial
107
- generator = Generators::PartialGenerator.new self.inverted
108
- self.inverted = generator.generate self.partial_strategy
109
- end
110
- # Generate a partial index from the given exact inverted index.
111
- #
112
- def generate_partial_from exact_inverted_index
113
- timed_exclaim %Q{"#{identifier}": Generating partial index for index.}
114
- self.inverted = exact_inverted_index
115
- self.generate_partial
116
- self
117
- end
118
- # Generates a new weights index (writes its index) using the
119
- # given weight caching strategy.
120
- #
121
- def generate_weights
122
- generator = Generators::WeightsGenerator.new self.inverted
123
- self.weights = generator.generate self.weights_strategy
124
- end
125
- # Generates a new similarity index (writes its index) using the
126
- # given similarity caching strategy.
127
- #
128
- def generate_similarity
129
- generator = Generators::SimilarityGenerator.new self.inverted
130
- self.similarity = generator.generate self.similarity_strategy
131
- end
86
+ # Load the data from the db.
87
+ #
88
+ def load_from_prepared_index_file
89
+ load_from_prepared_index_generation_message
90
+ clear
91
+ retrieve
92
+ end
93
+ def load_from_prepared_index_generation_message
94
+ timed_exclaim %Q{"#{identifier}": Loading prepared data into memory.}
95
+ end
96
+ # Retrieves the prepared index data into the index.
97
+ #
98
+ # This is in preparation for generating
99
+ # derived indexes (like weights, similarity)
100
+ # and later dumping the optimized index.
101
+ #
102
+ # TODO Move this out to the category?
103
+ #
104
+ def retrieve
105
+ format = category.key_format || :to_i # Optimization.
106
+ prepared.retrieve do |id, token|
107
+ initialize_inverted_index_for token
108
+ self.inverted[token] << id.send(format)
109
+ end
110
+ end
132
111
 
133
- # Saves the indexes in a dump file.
134
- #
135
- def dump
136
- timed_exclaim %Q{"#{identifier}": Dumping data.}
137
- dump_inverted
138
- dump_similarity
139
- dump_weights
140
- dump_configuration
141
- end
142
- # Dumps the core index.
143
- #
144
- def dump_inverted
145
- # timed_exclaim %Q{"#{identifier}": Dumping inverted index.}
146
- backend.dump_inverted self.inverted
147
- end
148
- # Dumps the weights index.
149
- #
150
- def dump_weights
151
- # timed_exclaim %Q{"#{identifier}": Dumping index weights.}
152
- backend.dump_weights self.weights
153
- end
154
- # Dumps the similarity index.
155
- #
156
- def dump_similarity
157
- # timed_exclaim %Q{"#{identifier}": Dumping similarity index.}
158
- backend.dump_similarity self.similarity
159
- end
160
- # Dumps the similarity index.
161
- #
162
- def dump_configuration
163
- # timed_exclaim %Q{"#{identifier}": Dumping configuration.}
164
- backend.dump_configuration self.configuration
165
- end
112
+ # Generates a new index (writes its index) using the
113
+ # partial caching strategy of this bundle.
114
+ #
115
+ def generate_partial
116
+ generator = Generators::PartialGenerator.new self.inverted
117
+ self.inverted = generator.generate self.partial_strategy
118
+ end
119
+ # Generate a partial index from the given exact inverted index.
120
+ #
121
+ def generate_partial_from exact_inverted_index
122
+ timed_exclaim %Q{"#{identifier}": Generating partial index for index.}
123
+ self.inverted = exact_inverted_index
124
+ self.generate_partial
125
+ self
126
+ end
127
+ # Generates a new weights index (writes its index) using the
128
+ # given weight caching strategy.
129
+ #
130
+ def generate_weights
131
+ generator = Generators::WeightsGenerator.new self.inverted
132
+ self.weights = generator.generate self.weights_strategy
133
+ end
134
+ # Generates a new similarity index (writes its index) using the
135
+ # given similarity caching strategy.
136
+ #
137
+ def generate_similarity
138
+ generator = Generators::SimilarityGenerator.new self.inverted
139
+ self.similarity = generator.generate self.similarity_strategy
140
+ end
166
141
 
167
- # Alerts the user if an index is missing.
168
- #
169
- def raise_unless_cache_exists
170
- raise_unless_index_exists
171
- raise_unless_similarity_exists
172
- end
173
- # Alerts the user if one of the necessary indexes
174
- # (core, weights) is missing.
175
- #
176
- def raise_unless_index_exists
177
- if partial_strategy.saved?
178
- warn_if_index_small
179
- raise_unless_index_ok
142
+ # Saves the indexes in a dump file.
143
+ #
144
+ def dump
145
+ timed_exclaim %Q{"#{identifier}": Dumping data.}
146
+ dump_inverted
147
+ dump_similarity
148
+ dump_weights
149
+ dump_configuration
180
150
  end
181
- end
182
- # Alerts the user if the similarity
183
- # index is missing (given that it's used).
184
- #
185
- def raise_unless_similarity_exists
186
- if similarity_strategy.saved?
187
- warn_if_similarity_small
188
- raise_unless_similarity_ok
151
+ # Dumps the core index.
152
+ #
153
+ def dump_inverted
154
+ # timed_exclaim %Q{"#{identifier}": Dumping inverted index.}
155
+ backend.dump_inverted self.inverted
156
+ end
157
+ # Dumps the weights index.
158
+ #
159
+ def dump_weights
160
+ # timed_exclaim %Q{"#{identifier}": Dumping index weights.}
161
+ backend.dump_weights self.weights
162
+ end
163
+ # Dumps the similarity index.
164
+ #
165
+ def dump_similarity
166
+ # timed_exclaim %Q{"#{identifier}": Dumping similarity index.}
167
+ backend.dump_similarity self.similarity
168
+ end
169
+ # Dumps the similarity index.
170
+ #
171
+ def dump_configuration
172
+ # timed_exclaim %Q{"#{identifier}": Dumping configuration.}
173
+ backend.dump_configuration self.configuration
189
174
  end
190
- end
191
175
 
192
- # Outputs a warning for the given cache.
193
- #
194
- def warn_cache_small what
195
- warn "Warning: #{what} cache for #{identifier} smaller than 16 bytes."
196
- end
197
- # Raises an appropriate error message for the given cache.
198
- #
199
- def raise_cache_missing what
200
- raise "Error: The #{what} cache for #{identifier} is missing."
201
- end
176
+ # Alerts the user if an index is missing.
177
+ #
178
+ def raise_unless_cache_exists
179
+ raise_unless_index_exists
180
+ raise_unless_similarity_exists
181
+ end
182
+ # Alerts the user if one of the necessary indexes
183
+ # (core, weights) is missing.
184
+ #
185
+ def raise_unless_index_exists
186
+ if partial_strategy.saved?
187
+ warn_if_index_small
188
+ raise_unless_index_ok
189
+ end
190
+ end
191
+ # Alerts the user if the similarity
192
+ # index is missing (given that it's used).
193
+ #
194
+ def raise_unless_similarity_exists
195
+ if similarity_strategy.saved?
196
+ warn_if_similarity_small
197
+ raise_unless_similarity_ok
198
+ end
199
+ end
202
200
 
203
- # Warns the user if the similarity index is small.
204
- #
205
- def warn_if_similarity_small
206
- warn_cache_small :similarity if backend.similarity_cache_small?
207
- end
208
- # Alerts the user if the similarity index is not there.
209
- #
210
- def raise_unless_similarity_ok
211
- raise_cache_missing :similarity unless backend.similarity_cache_ok?
212
- end
201
+ # Outputs a warning for the given cache.
202
+ #
203
+ def warn_cache_small what
204
+ warn "Warning: #{what} cache for #{identifier} smaller than 16 bytes."
205
+ end
206
+ # Raises an appropriate error message for the given cache.
207
+ #
208
+ def raise_cache_missing what
209
+ raise "Error: The #{what} cache for #{identifier} is missing."
210
+ end
211
+
212
+ # Warns the user if the similarity index is small.
213
+ #
214
+ def warn_if_similarity_small
215
+ warn_cache_small :similarity if backend.similarity_cache_small?
216
+ end
217
+ # Alerts the user if the similarity index is not there.
218
+ #
219
+ def raise_unless_similarity_ok
220
+ raise_cache_missing :similarity unless backend.similarity_cache_ok?
221
+ end
222
+
223
+ # Warns the user if the core or weights indexes are small.
224
+ #
225
+ def warn_if_index_small
226
+ warn_cache_small :inverted if backend.inverted_cache_small?
227
+ warn_cache_small :weights if backend.weights_cache_small?
228
+ end
229
+ # Alerts the user if the core or weights indexes are not there.
230
+ #
231
+ def raise_unless_index_ok
232
+ raise_cache_missing :inverted unless backend.inverted_cache_ok?
233
+ raise_cache_missing :weights unless backend.weights_cache_ok?
234
+ end
213
235
 
214
- # Warns the user if the core or weights indexes are small.
215
- #
216
- def warn_if_index_small
217
- warn_cache_small :inverted if backend.inverted_cache_small?
218
- warn_cache_small :weights if backend.weights_cache_small?
219
- end
220
- # Alerts the user if the core or weights indexes are not there.
221
- #
222
- def raise_unless_index_ok
223
- raise_cache_missing :inverted unless backend.inverted_cache_ok?
224
- raise_cache_missing :weights unless backend.weights_cache_ok?
225
236
  end
226
237
 
227
238
  end
@@ -1,18 +1,23 @@
1
- # encoding: utf-8
2
- #
3
- module Indexing # :nodoc:all
1
+ module Picky
4
2
 
5
- module Bundle
3
+ # encoding: utf-8
4
+ #
5
+ module Indexing # :nodoc:all
6
6
 
7
- # The memory version dumps its generated indexes to disk
8
- # (mostly JSON) to load them into memory on startup.
9
- #
10
- class Memory < Base
7
+ module Bundle
11
8
 
12
- # We're using files for the memory backend.
13
- # E.g. dump writes files.
9
+ # The memory version dumps its generated indexes to disk
10
+ # (mostly JSON) to load them into memory on startup.
14
11
  #
15
- alias backend files
12
+ class Memory < Base
13
+
14
+ def initialize name, category, *args
15
+ super name, category, *args
16
+
17
+ @backend = Backend::Files.new self
18
+ end
19
+
20
+ end
16
21
 
17
22
  end
18
23
 
@@ -1,20 +1,22 @@
1
- # encoding: utf-8
2
- #
3
- module Indexing # :nodoc:all
1
+ module Picky
4
2
 
5
- module Bundle
3
+ # encoding: utf-8
4
+ #
5
+ module Indexing # :nodoc:all
6
6
 
7
- # The Redis version dumps its generated indexes to
8
- # the Redis backend.
9
- #
10
- class Redis < Base
7
+ module Bundle
11
8
 
12
- attr_reader :backend
9
+ # The Redis version dumps its generated indexes to
10
+ # the Redis backend.
11
+ #
12
+ class Redis < Base
13
13
 
14
- def initialize name, category, *args
15
- super name, category, *args
14
+ def initialize name, category, *args
15
+ super name, category, *args
16
+
17
+ @backend = Backend::Redis.new self
18
+ end
16
19
 
17
- @backend = Backend::Redis.new name, category
18
20
  end
19
21
 
20
22
  end
@@ -1,25 +1,29 @@
1
- module Indexing
2
- module Wrappers
3
- module Category
1
+ module Picky
4
2
 
5
- module Location
3
+ module Indexing
4
+ module Wrappers
5
+ module Category
6
6
 
7
- def self.install_on category, grid, precision = 1
8
- new_source = Sources::Wrappers::Location.new category.source, grid, precision
7
+ module Location
9
8
 
10
- category.class_eval do
11
- def tokenizer
12
- @tokenizer ||= Tokenizers::Index.new
13
- end
14
- define_method :source do
15
- new_source
9
+ def self.install_on category, grid, precision = 1
10
+ new_source = Sources::Wrappers::Location.new category.source, grid, precision
11
+
12
+ category.class_eval do
13
+ def tokenizer
14
+ @tokenizer ||= Tokenizers::Index.new
15
+ end
16
+ define_method :source do
17
+ new_source
18
+ end
16
19
  end
20
+
17
21
  end
18
22
 
19
23
  end
20
24
 
21
25
  end
22
-
23
26
  end
24
27
  end
28
+
25
29
  end