searchkick 2.3.2 → 4.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +251 -84
  3. data/LICENSE.txt +1 -1
  4. data/README.md +552 -432
  5. data/lib/searchkick/bulk_indexer.rb +173 -0
  6. data/lib/searchkick/bulk_reindex_job.rb +2 -2
  7. data/lib/searchkick/hash_wrapper.rb +12 -0
  8. data/lib/searchkick/index.rb +187 -348
  9. data/lib/searchkick/index_options.rb +494 -282
  10. data/lib/searchkick/logging.rb +17 -13
  11. data/lib/searchkick/model.rb +52 -97
  12. data/lib/searchkick/multi_search.rb +9 -10
  13. data/lib/searchkick/process_batch_job.rb +17 -4
  14. data/lib/searchkick/process_queue_job.rb +20 -12
  15. data/lib/searchkick/query.rb +415 -199
  16. data/lib/searchkick/railtie.rb +7 -0
  17. data/lib/searchkick/record_data.rb +128 -0
  18. data/lib/searchkick/record_indexer.rb +79 -0
  19. data/lib/searchkick/reindex_queue.rb +1 -1
  20. data/lib/searchkick/reindex_v2_job.rb +14 -12
  21. data/lib/searchkick/results.rb +135 -41
  22. data/lib/searchkick/version.rb +1 -1
  23. data/lib/searchkick.rb +130 -61
  24. data/lib/tasks/searchkick.rake +34 -0
  25. metadata +18 -162
  26. data/.gitignore +0 -22
  27. data/.travis.yml +0 -39
  28. data/Gemfile +0 -16
  29. data/Rakefile +0 -20
  30. data/benchmark/Gemfile +0 -23
  31. data/benchmark/benchmark.rb +0 -97
  32. data/lib/searchkick/tasks.rb +0 -33
  33. data/searchkick.gemspec +0 -28
  34. data/test/aggs_test.rb +0 -197
  35. data/test/autocomplete_test.rb +0 -75
  36. data/test/boost_test.rb +0 -202
  37. data/test/callbacks_test.rb +0 -59
  38. data/test/ci/before_install.sh +0 -17
  39. data/test/errors_test.rb +0 -19
  40. data/test/gemfiles/activerecord31.gemfile +0 -7
  41. data/test/gemfiles/activerecord32.gemfile +0 -7
  42. data/test/gemfiles/activerecord40.gemfile +0 -8
  43. data/test/gemfiles/activerecord41.gemfile +0 -8
  44. data/test/gemfiles/activerecord42.gemfile +0 -7
  45. data/test/gemfiles/activerecord50.gemfile +0 -7
  46. data/test/gemfiles/apartment.gemfile +0 -8
  47. data/test/gemfiles/cequel.gemfile +0 -8
  48. data/test/gemfiles/mongoid2.gemfile +0 -7
  49. data/test/gemfiles/mongoid3.gemfile +0 -6
  50. data/test/gemfiles/mongoid4.gemfile +0 -7
  51. data/test/gemfiles/mongoid5.gemfile +0 -7
  52. data/test/gemfiles/mongoid6.gemfile +0 -12
  53. data/test/gemfiles/nobrainer.gemfile +0 -8
  54. data/test/gemfiles/parallel_tests.gemfile +0 -8
  55. data/test/geo_shape_test.rb +0 -175
  56. data/test/highlight_test.rb +0 -78
  57. data/test/index_test.rb +0 -166
  58. data/test/inheritance_test.rb +0 -83
  59. data/test/marshal_test.rb +0 -8
  60. data/test/match_test.rb +0 -276
  61. data/test/misspellings_test.rb +0 -56
  62. data/test/model_test.rb +0 -42
  63. data/test/multi_search_test.rb +0 -36
  64. data/test/multi_tenancy_test.rb +0 -22
  65. data/test/order_test.rb +0 -46
  66. data/test/pagination_test.rb +0 -70
  67. data/test/partial_reindex_test.rb +0 -58
  68. data/test/query_test.rb +0 -35
  69. data/test/records_test.rb +0 -10
  70. data/test/reindex_test.rb +0 -64
  71. data/test/reindex_v2_job_test.rb +0 -32
  72. data/test/routing_test.rb +0 -23
  73. data/test/should_index_test.rb +0 -32
  74. data/test/similar_test.rb +0 -28
  75. data/test/sql_test.rb +0 -214
  76. data/test/suggest_test.rb +0 -95
  77. data/test/support/kaminari.yml +0 -21
  78. data/test/synonyms_test.rb +0 -67
  79. data/test/test_helper.rb +0 -567
  80. data/test/where_test.rb +0 -223
data/test/where_test.rb DELETED
@@ -1,223 +0,0 @@
1
- require_relative "test_helper"
2
-
3
- class WhereTest < Minitest::Test
4
- def test_where
5
- now = Time.now
6
- store [
7
- {name: "Product A", store_id: 1, in_stock: true, backordered: true, created_at: now, orders_count: 4, user_ids: [1, 2, 3]},
8
- {name: "Product B", store_id: 2, in_stock: true, backordered: false, created_at: now - 1, orders_count: 3, user_ids: [1]},
9
- {name: "Product C", store_id: 3, in_stock: false, backordered: true, created_at: now - 2, orders_count: 2, user_ids: [1, 3]},
10
- {name: "Product D", store_id: 4, in_stock: false, backordered: false, created_at: now - 3, orders_count: 1}
11
- ]
12
- assert_search "product", ["Product A", "Product B"], where: {in_stock: true}
13
-
14
- # due to precision
15
- unless cequel?
16
- # date
17
- assert_search "product", ["Product A"], where: {created_at: {gt: now - 1}}
18
- assert_search "product", ["Product A", "Product B"], where: {created_at: {gte: now - 1}}
19
- assert_search "product", ["Product D"], where: {created_at: {lt: now - 2}}
20
- assert_search "product", ["Product C", "Product D"], where: {created_at: {lte: now - 2}}
21
- end
22
-
23
- # integer
24
- assert_search "product", ["Product A"], where: {store_id: {lt: 2}}
25
- assert_search "product", ["Product A", "Product B"], where: {store_id: {lte: 2}}
26
- assert_search "product", ["Product D"], where: {store_id: {gt: 3}}
27
- assert_search "product", ["Product C", "Product D"], where: {store_id: {gte: 3}}
28
-
29
- # range
30
- assert_search "product", ["Product A", "Product B"], where: {store_id: 1..2}
31
- assert_search "product", ["Product A"], where: {store_id: 1...2}
32
- assert_search "product", ["Product A", "Product B"], where: {store_id: [1, 2]}
33
- assert_search "product", ["Product B", "Product C", "Product D"], where: {store_id: {not: 1}}
34
- assert_search "product", ["Product C", "Product D"], where: {store_id: {not: [1, 2]}}
35
- assert_search "product", ["Product A"], where: {user_ids: {lte: 2, gte: 2}}
36
-
37
- # or
38
- assert_search "product", ["Product A", "Product B", "Product C"], where: {or: [[{in_stock: true}, {store_id: 3}]]}
39
- assert_search "product", ["Product A", "Product B", "Product C"], where: {or: [[{orders_count: [2, 4]}, {store_id: [1, 2]}]]}
40
- assert_search "product", ["Product A", "Product D"], where: {or: [[{orders_count: 1}, {created_at: {gte: now - 1}, backordered: true}]]}
41
-
42
- # _or
43
- assert_search "product", ["Product A", "Product B", "Product C"], where: {_or: [{in_stock: true}, {store_id: 3}]}
44
- assert_search "product", ["Product A", "Product B", "Product C"], where: {_or: [{orders_count: [2, 4]}, {store_id: [1, 2]}]}
45
- assert_search "product", ["Product A", "Product D"], where: {_or: [{orders_count: 1}, {created_at: {gte: now - 1}, backordered: true}]}
46
-
47
- # _and
48
- assert_search "product", ["Product A"], where: {_and: [{in_stock: true}, {backordered: true}]}
49
-
50
- # _not
51
- assert_search "product", ["Product B", "Product C"], where: {_not: {_or: [{orders_count: 1}, {created_at: {gte: now - 1}, backordered: true}]}}
52
-
53
- # all
54
- assert_search "product", ["Product A", "Product C"], where: {user_ids: {all: [1, 3]}}
55
- assert_search "product", [], where: {user_ids: {all: [1, 2, 3, 4]}}
56
-
57
- # any / nested terms
58
- assert_search "product", ["Product B", "Product C"], where: {user_ids: {not: [2], in: [1, 3]}}
59
-
60
- # not / exists
61
- assert_search "product", ["Product D"], where: {user_ids: nil}
62
- assert_search "product", ["Product A", "Product B", "Product C"], where: {user_ids: {not: nil}}
63
- assert_search "product", ["Product A", "Product C", "Product D"], where: {user_ids: [3, nil]}
64
- assert_search "product", ["Product B"], where: {user_ids: {not: [3, nil]}}
65
- end
66
-
67
- def test_regexp
68
- store_names ["Product A"]
69
- assert_search "*", ["Product A"], where: {name: /Pro.+/}
70
- end
71
-
72
- def test_alternate_regexp
73
- store_names ["Product A", "Item B"]
74
- assert_search "*", ["Product A"], where: {name: {regexp: "Pro.+"}}
75
- end
76
-
77
- def test_where_string
78
- store [
79
- {name: "Product A", color: "RED"}
80
- ]
81
- assert_search "product", ["Product A"], where: {color: "RED"}
82
- end
83
-
84
- def test_where_nil
85
- store [
86
- {name: "Product A"},
87
- {name: "Product B", color: "red"}
88
- ]
89
- assert_search "product", ["Product A"], where: {color: nil}
90
- end
91
-
92
- def test_where_id
93
- store_names ["Product A"]
94
- product = Product.first
95
- assert_search "product", ["Product A"], where: {id: product.id.to_s}
96
- end
97
-
98
- def test_where_empty
99
- store_names ["Product A"]
100
- assert_search "product", ["Product A"], where: {}
101
- end
102
-
103
- def test_where_empty_array
104
- store_names ["Product A"]
105
- assert_search "product", [], where: {store_id: []}
106
- end
107
-
108
- # http://elasticsearch-users.115913.n3.nabble.com/Numeric-range-quey-or-filter-in-an-array-field-possible-or-not-td4042967.html
109
- # https://gist.github.com/jprante/7099463
110
- def test_where_range_array
111
- store [
112
- {name: "Product A", user_ids: [11, 23, 13, 16, 17, 23]},
113
- {name: "Product B", user_ids: [1, 2, 3, 4, 5, 6, 7, 8, 9]},
114
- {name: "Product C", user_ids: [101, 230, 150, 200]}
115
- ]
116
- assert_search "product", ["Product A"], where: {user_ids: {gt: 10, lt: 24}}
117
- end
118
-
119
- def test_where_range_array_again
120
- store [
121
- {name: "Product A", user_ids: [19, 32, 42]},
122
- {name: "Product B", user_ids: [13, 40, 52]}
123
- ]
124
- assert_search "product", ["Product A"], where: {user_ids: {gt: 26, lt: 36}}
125
- end
126
-
127
- def test_near
128
- store [
129
- {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
130
- {name: "San Antonio", latitude: 29.4167, longitude: -98.5000}
131
- ]
132
- assert_search "san", ["San Francisco"], where: {location: {near: [37.5, -122.5]}}
133
- end
134
-
135
- def test_near_hash
136
- store [
137
- {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
138
- {name: "San Antonio", latitude: 29.4167, longitude: -98.5000}
139
- ]
140
- assert_search "san", ["San Francisco"], where: {location: {near: {lat: 37.5, lon: -122.5}}}
141
- end
142
-
143
- def test_near_within
144
- store [
145
- {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
146
- {name: "San Antonio", latitude: 29.4167, longitude: -98.5000},
147
- {name: "San Marino", latitude: 43.9333, longitude: 12.4667}
148
- ]
149
- assert_search "san", ["San Francisco", "San Antonio"], where: {location: {near: [37, -122], within: "2000mi"}}
150
- end
151
-
152
- def test_near_within_hash
153
- store [
154
- {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
155
- {name: "San Antonio", latitude: 29.4167, longitude: -98.5000},
156
- {name: "San Marino", latitude: 43.9333, longitude: 12.4667}
157
- ]
158
- assert_search "san", ["San Francisco", "San Antonio"], where: {location: {near: {lat: 37, lon: -122}, within: "2000mi"}}
159
- end
160
-
161
- def test_geo_polygon
162
- store [
163
- {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
164
- {name: "San Antonio", latitude: 29.4167, longitude: -98.5000},
165
- {name: "San Marino", latitude: 43.9333, longitude: 12.4667}
166
- ]
167
- polygon = [
168
- {lat: 42.185695, lon: -125.496146},
169
- {lat: 42.185695, lon: -94.125535},
170
- {lat: 27.122789, lon: -94.125535},
171
- {lat: 27.12278, lon: -125.496146}
172
- ]
173
- assert_search "san", ["San Francisco", "San Antonio"], where: {location: {geo_polygon: {points: polygon}}}
174
- end
175
-
176
- def test_top_left_bottom_right
177
- store [
178
- {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
179
- {name: "San Antonio", latitude: 29.4167, longitude: -98.5000}
180
- ]
181
- assert_search "san", ["San Francisco"], where: {location: {top_left: [38, -123], bottom_right: [37, -122]}}
182
- end
183
-
184
- def test_top_left_bottom_right_hash
185
- store [
186
- {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
187
- {name: "San Antonio", latitude: 29.4167, longitude: -98.5000}
188
- ]
189
- assert_search "san", ["San Francisco"], where: {location: {top_left: {lat: 38, lon: -123}, bottom_right: {lat: 37, lon: -122}}}
190
- end
191
-
192
- def test_multiple_locations
193
- store [
194
- {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
195
- {name: "San Antonio", latitude: 29.4167, longitude: -98.5000}
196
- ]
197
- assert_search "san", ["San Francisco"], where: {multiple_locations: {near: [37.5, -122.5]}}
198
- end
199
-
200
- def test_multiple_locations_with_term_filter
201
- store [
202
- {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
203
- {name: "San Antonio", latitude: 29.4167, longitude: -98.5000}
204
- ]
205
- assert_search "san", [], where: {multiple_locations: {near: [37.5, -122.5]}, name: "San Antonio"}
206
- assert_search "san", ["San Francisco"], where: {multiple_locations: {near: [37.5, -122.5]}, name: "San Francisco"}
207
- end
208
-
209
- def test_multiple_locations_hash
210
- store [
211
- {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
212
- {name: "San Antonio", latitude: 29.4167, longitude: -98.5000}
213
- ]
214
- assert_search "san", ["San Francisco"], where: {multiple_locations: {near: {lat: 37.5, lon: -122.5}}}
215
- end
216
-
217
- def test_nested
218
- store [
219
- {name: "Product A", details: {year: 2016}}
220
- ]
221
- assert_search "product", ["Product A"], where: {"details.year" => 2016}
222
- end
223
- end