searchkick 2.3.2 → 5.2.1

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.
Files changed (87) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +377 -84
  3. data/LICENSE.txt +1 -1
  4. data/README.md +859 -602
  5. data/lib/searchkick/bulk_reindex_job.rb +13 -9
  6. data/lib/searchkick/controller_runtime.rb +40 -0
  7. data/lib/searchkick/hash_wrapper.rb +12 -0
  8. data/lib/searchkick/index.rb +281 -356
  9. data/lib/searchkick/index_cache.rb +30 -0
  10. data/lib/searchkick/index_options.rb +487 -281
  11. data/lib/searchkick/indexer.rb +15 -8
  12. data/lib/searchkick/log_subscriber.rb +57 -0
  13. data/lib/searchkick/middleware.rb +9 -2
  14. data/lib/searchkick/model.rb +72 -118
  15. data/lib/searchkick/multi_search.rb +9 -10
  16. data/lib/searchkick/process_batch_job.rb +12 -15
  17. data/lib/searchkick/process_queue_job.rb +22 -13
  18. data/lib/searchkick/query.rb +458 -217
  19. data/lib/searchkick/railtie.rb +7 -0
  20. data/lib/searchkick/record_data.rb +128 -0
  21. data/lib/searchkick/record_indexer.rb +164 -0
  22. data/lib/searchkick/reindex_queue.rb +51 -9
  23. data/lib/searchkick/reindex_v2_job.rb +10 -32
  24. data/lib/searchkick/relation.rb +247 -0
  25. data/lib/searchkick/relation_indexer.rb +155 -0
  26. data/lib/searchkick/results.rb +201 -82
  27. data/lib/searchkick/version.rb +1 -1
  28. data/lib/searchkick/where.rb +11 -0
  29. data/lib/searchkick.rb +269 -97
  30. data/lib/tasks/searchkick.rake +37 -0
  31. metadata +24 -178
  32. data/.gitignore +0 -22
  33. data/.travis.yml +0 -39
  34. data/Gemfile +0 -16
  35. data/Rakefile +0 -20
  36. data/benchmark/Gemfile +0 -23
  37. data/benchmark/benchmark.rb +0 -97
  38. data/lib/searchkick/logging.rb +0 -242
  39. data/lib/searchkick/tasks.rb +0 -33
  40. data/searchkick.gemspec +0 -28
  41. data/test/aggs_test.rb +0 -197
  42. data/test/autocomplete_test.rb +0 -75
  43. data/test/boost_test.rb +0 -202
  44. data/test/callbacks_test.rb +0 -59
  45. data/test/ci/before_install.sh +0 -17
  46. data/test/errors_test.rb +0 -19
  47. data/test/gemfiles/activerecord31.gemfile +0 -7
  48. data/test/gemfiles/activerecord32.gemfile +0 -7
  49. data/test/gemfiles/activerecord40.gemfile +0 -8
  50. data/test/gemfiles/activerecord41.gemfile +0 -8
  51. data/test/gemfiles/activerecord42.gemfile +0 -7
  52. data/test/gemfiles/activerecord50.gemfile +0 -7
  53. data/test/gemfiles/apartment.gemfile +0 -8
  54. data/test/gemfiles/cequel.gemfile +0 -8
  55. data/test/gemfiles/mongoid2.gemfile +0 -7
  56. data/test/gemfiles/mongoid3.gemfile +0 -6
  57. data/test/gemfiles/mongoid4.gemfile +0 -7
  58. data/test/gemfiles/mongoid5.gemfile +0 -7
  59. data/test/gemfiles/mongoid6.gemfile +0 -12
  60. data/test/gemfiles/nobrainer.gemfile +0 -8
  61. data/test/gemfiles/parallel_tests.gemfile +0 -8
  62. data/test/geo_shape_test.rb +0 -175
  63. data/test/highlight_test.rb +0 -78
  64. data/test/index_test.rb +0 -166
  65. data/test/inheritance_test.rb +0 -83
  66. data/test/marshal_test.rb +0 -8
  67. data/test/match_test.rb +0 -276
  68. data/test/misspellings_test.rb +0 -56
  69. data/test/model_test.rb +0 -42
  70. data/test/multi_search_test.rb +0 -36
  71. data/test/multi_tenancy_test.rb +0 -22
  72. data/test/order_test.rb +0 -46
  73. data/test/pagination_test.rb +0 -70
  74. data/test/partial_reindex_test.rb +0 -58
  75. data/test/query_test.rb +0 -35
  76. data/test/records_test.rb +0 -10
  77. data/test/reindex_test.rb +0 -64
  78. data/test/reindex_v2_job_test.rb +0 -32
  79. data/test/routing_test.rb +0 -23
  80. data/test/should_index_test.rb +0 -32
  81. data/test/similar_test.rb +0 -28
  82. data/test/sql_test.rb +0 -214
  83. data/test/suggest_test.rb +0 -95
  84. data/test/support/kaminari.yml +0 -21
  85. data/test/synonyms_test.rb +0 -67
  86. data/test/test_helper.rb +0 -567
  87. 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