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
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: searchkick
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.2
4
+ version: 5.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-09 00:00:00.000000000 Z
11
+ date: 2023-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -16,28 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '4.1'
19
+ version: '5.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '4.1'
27
- - !ruby/object:Gem::Dependency
28
- name: elasticsearch
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '1'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '1'
26
+ version: '5.2'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: hashie
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -52,134 +38,46 @@ dependencies:
52
38
  - - ">="
53
39
  - !ruby/object:Gem::Version
54
40
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: bundler
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: rake
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: minitest
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- description: Intelligent search made easy
98
- email:
99
- - andrew@chartkick.com
41
+ description:
42
+ email: andrew@ankane.org
100
43
  executables: []
101
44
  extensions: []
102
45
  extra_rdoc_files: []
103
46
  files:
104
- - ".gitignore"
105
- - ".travis.yml"
106
47
  - CHANGELOG.md
107
- - Gemfile
108
48
  - LICENSE.txt
109
49
  - README.md
110
- - Rakefile
111
- - benchmark/Gemfile
112
- - benchmark/benchmark.rb
113
50
  - lib/searchkick.rb
114
51
  - lib/searchkick/bulk_reindex_job.rb
52
+ - lib/searchkick/controller_runtime.rb
53
+ - lib/searchkick/hash_wrapper.rb
115
54
  - lib/searchkick/index.rb
55
+ - lib/searchkick/index_cache.rb
116
56
  - lib/searchkick/index_options.rb
117
57
  - lib/searchkick/indexer.rb
118
- - lib/searchkick/logging.rb
58
+ - lib/searchkick/log_subscriber.rb
119
59
  - lib/searchkick/middleware.rb
120
60
  - lib/searchkick/model.rb
121
61
  - lib/searchkick/multi_search.rb
122
62
  - lib/searchkick/process_batch_job.rb
123
63
  - lib/searchkick/process_queue_job.rb
124
64
  - lib/searchkick/query.rb
65
+ - lib/searchkick/railtie.rb
66
+ - lib/searchkick/record_data.rb
67
+ - lib/searchkick/record_indexer.rb
125
68
  - lib/searchkick/reindex_queue.rb
126
69
  - lib/searchkick/reindex_v2_job.rb
70
+ - lib/searchkick/relation.rb
71
+ - lib/searchkick/relation_indexer.rb
127
72
  - lib/searchkick/results.rb
128
- - lib/searchkick/tasks.rb
129
73
  - lib/searchkick/version.rb
130
- - searchkick.gemspec
131
- - test/aggs_test.rb
132
- - test/autocomplete_test.rb
133
- - test/boost_test.rb
134
- - test/callbacks_test.rb
135
- - test/ci/before_install.sh
136
- - test/errors_test.rb
137
- - test/gemfiles/activerecord31.gemfile
138
- - test/gemfiles/activerecord32.gemfile
139
- - test/gemfiles/activerecord40.gemfile
140
- - test/gemfiles/activerecord41.gemfile
141
- - test/gemfiles/activerecord42.gemfile
142
- - test/gemfiles/activerecord50.gemfile
143
- - test/gemfiles/apartment.gemfile
144
- - test/gemfiles/cequel.gemfile
145
- - test/gemfiles/mongoid2.gemfile
146
- - test/gemfiles/mongoid3.gemfile
147
- - test/gemfiles/mongoid4.gemfile
148
- - test/gemfiles/mongoid5.gemfile
149
- - test/gemfiles/mongoid6.gemfile
150
- - test/gemfiles/nobrainer.gemfile
151
- - test/gemfiles/parallel_tests.gemfile
152
- - test/geo_shape_test.rb
153
- - test/highlight_test.rb
154
- - test/index_test.rb
155
- - test/inheritance_test.rb
156
- - test/marshal_test.rb
157
- - test/match_test.rb
158
- - test/misspellings_test.rb
159
- - test/model_test.rb
160
- - test/multi_search_test.rb
161
- - test/multi_tenancy_test.rb
162
- - test/order_test.rb
163
- - test/pagination_test.rb
164
- - test/partial_reindex_test.rb
165
- - test/query_test.rb
166
- - test/records_test.rb
167
- - test/reindex_test.rb
168
- - test/reindex_v2_job_test.rb
169
- - test/routing_test.rb
170
- - test/should_index_test.rb
171
- - test/similar_test.rb
172
- - test/sql_test.rb
173
- - test/suggest_test.rb
174
- - test/support/kaminari.yml
175
- - test/synonyms_test.rb
176
- - test/test_helper.rb
177
- - test/where_test.rb
74
+ - lib/searchkick/where.rb
75
+ - lib/tasks/searchkick.rake
178
76
  homepage: https://github.com/ankane/searchkick
179
77
  licenses:
180
78
  - MIT
181
79
  metadata: {}
182
- post_install_message:
80
+ post_install_message:
183
81
  rdoc_options: []
184
82
  require_paths:
185
83
  - lib
@@ -187,67 +85,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
187
85
  requirements:
188
86
  - - ">="
189
87
  - !ruby/object:Gem::Version
190
- version: '0'
88
+ version: '2.6'
191
89
  required_rubygems_version: !ruby/object:Gem::Requirement
192
90
  requirements:
193
91
  - - ">="
194
92
  - !ruby/object:Gem::Version
195
93
  version: '0'
196
94
  requirements: []
197
- rubyforge_project:
198
- rubygems_version: 2.6.13
199
- signing_key:
95
+ rubygems_version: 3.4.6
96
+ signing_key:
200
97
  specification_version: 4
201
- summary: Searchkick learns what your users are looking for. As more people search,
202
- it gets smarter and the results get better. It’s friendly for developers - and magical
203
- for your users.
204
- test_files:
205
- - benchmark/Gemfile
206
- - benchmark/benchmark.rb
207
- - test/aggs_test.rb
208
- - test/autocomplete_test.rb
209
- - test/boost_test.rb
210
- - test/callbacks_test.rb
211
- - test/ci/before_install.sh
212
- - test/errors_test.rb
213
- - test/gemfiles/activerecord31.gemfile
214
- - test/gemfiles/activerecord32.gemfile
215
- - test/gemfiles/activerecord40.gemfile
216
- - test/gemfiles/activerecord41.gemfile
217
- - test/gemfiles/activerecord42.gemfile
218
- - test/gemfiles/activerecord50.gemfile
219
- - test/gemfiles/apartment.gemfile
220
- - test/gemfiles/cequel.gemfile
221
- - test/gemfiles/mongoid2.gemfile
222
- - test/gemfiles/mongoid3.gemfile
223
- - test/gemfiles/mongoid4.gemfile
224
- - test/gemfiles/mongoid5.gemfile
225
- - test/gemfiles/mongoid6.gemfile
226
- - test/gemfiles/nobrainer.gemfile
227
- - test/gemfiles/parallel_tests.gemfile
228
- - test/geo_shape_test.rb
229
- - test/highlight_test.rb
230
- - test/index_test.rb
231
- - test/inheritance_test.rb
232
- - test/marshal_test.rb
233
- - test/match_test.rb
234
- - test/misspellings_test.rb
235
- - test/model_test.rb
236
- - test/multi_search_test.rb
237
- - test/multi_tenancy_test.rb
238
- - test/order_test.rb
239
- - test/pagination_test.rb
240
- - test/partial_reindex_test.rb
241
- - test/query_test.rb
242
- - test/records_test.rb
243
- - test/reindex_test.rb
244
- - test/reindex_v2_job_test.rb
245
- - test/routing_test.rb
246
- - test/should_index_test.rb
247
- - test/similar_test.rb
248
- - test/sql_test.rb
249
- - test/suggest_test.rb
250
- - test/support/kaminari.yml
251
- - test/synonyms_test.rb
252
- - test/test_helper.rb
253
- - test/where_test.rb
98
+ summary: Intelligent search made easy with Rails and Elasticsearch or OpenSearch
99
+ test_files: []
data/.gitignore DELETED
@@ -1,22 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- *.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- *.log
19
- .DS_Store
20
- .ruby-*
21
- .idea/
22
- *.sqlite3
data/.travis.yml DELETED
@@ -1,39 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm: 2.3.1
4
- services:
5
- - mongodb
6
- - redis-server
7
- before_install:
8
- - ./test/ci/before_install.sh
9
- script: bundle exec rake test
10
- before_script:
11
- - psql -c 'create database searchkick_test;' -U postgres
12
- notifications:
13
- email:
14
- on_success: never
15
- on_failure: change
16
- gemfile:
17
- - Gemfile
18
- - test/gemfiles/activerecord50.gemfile
19
- - test/gemfiles/activerecord42.gemfile
20
- - test/gemfiles/mongoid5.gemfile
21
- - test/gemfiles/mongoid6.gemfile
22
- env:
23
- - ELASTICSEARCH_VERSION=5.5.0
24
- jdk: oraclejdk8
25
- matrix:
26
- include:
27
- - gemfile: Gemfile
28
- env: ELASTICSEARCH_VERSION=2.0.0
29
- jdk: oraclejdk7
30
- - gemfile: Gemfile
31
- env: ELASTICSEARCH_VERSION=2.4.3
32
- jdk: oraclejdk7
33
- - gemfile: Gemfile
34
- env: ELASTICSEARCH_VERSION=5.0.1
35
- jdk: oraclejdk8
36
- allow_failures:
37
- - gemfile: Gemfile
38
- env: ELASTICSEARCH_VERSION=6.0.0-beta1
39
- jdk: oraclejdk8
data/Gemfile DELETED
@@ -1,16 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in searchkick.gemspec
4
- gemspec
5
-
6
- gem "sqlite3"
7
- gem "activerecord", "~> 5.1.0"
8
- gem "gemoji-parser"
9
- gem "typhoeus"
10
- gem "activejob"
11
- gem "redis"
12
- gem "connection_pool"
13
-
14
- # kaminari
15
- gem "actionpack"
16
- gem "kaminari"
data/Rakefile DELETED
@@ -1,20 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
3
-
4
- begin
5
- require "parallel_tests/tasks"
6
- require "shellwords"
7
- rescue LoadError
8
- # do nothing
9
- end
10
-
11
- task default: :test
12
- Rake::TestTask.new do |t|
13
- t.libs << "test"
14
- t.pattern = "test/**/*_test.rb"
15
- t.warning = false
16
- end
17
-
18
- task :benchmark do
19
- require_relative "benchmark/benchmark"
20
- end
data/benchmark/Gemfile DELETED
@@ -1,23 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in searchkick.gemspec
4
- gemspec path: "../"
5
-
6
- # gem "sqlite3"
7
- gem "pg"
8
- gem "activerecord", "~> 5.0.0"
9
- gem "activerecord-import"
10
- gem "activejob"
11
- gem "redis"
12
- gem "sidekiq"
13
-
14
- # performance
15
- gem "typhoeus"
16
- gem "oj"
17
-
18
- # profiling
19
- gem "ruby-prof"
20
- gem "allocation_stats"
21
- gem "get_process_mem"
22
- gem "memory_profiler"
23
- gem "allocation_tracer"
@@ -1,97 +0,0 @@
1
- require "bundler/setup"
2
- Bundler.require(:default)
3
- require "active_record"
4
- require "benchmark"
5
- require "active_support/notifications"
6
-
7
- ActiveSupport::Notifications.subscribe "request.searchkick" do |*args|
8
- event = ActiveSupport::Notifications::Event.new(*args)
9
- p event.duration
10
- end
11
-
12
- ActiveJob::Base.queue_adapter = :sidekiq
13
-
14
- Searchkick.redis = Redis.new
15
-
16
- ActiveRecord::Base.default_timezone = :utc
17
- ActiveRecord::Base.time_zone_aware_attributes = true
18
- # ActiveRecord::Base.establish_connection adapter: "sqlite3", database: "/tmp/searchkick"
19
- ActiveRecord::Base.establish_connection "postgresql://localhost/searchkick_demo_development"
20
- # ActiveRecord::Base.logger = Logger.new(STDOUT)
21
-
22
- ActiveJob::Base.logger = nil
23
-
24
- class Product < ActiveRecord::Base
25
- searchkick batch_size: 1000
26
-
27
- def search_data
28
- {
29
- name: name,
30
- color: color,
31
- store_id: store_id
32
- }
33
- end
34
- end
35
-
36
- total_docs = 100000
37
-
38
- # ActiveRecord::Migration.create_table :products, force: :cascade do |t|
39
- # t.string :name
40
- # t.string :color
41
- # t.integer :store_id
42
- # end
43
-
44
- # Product.import ["name", "color", "store_id"], total_docs.times.map { |i| ["Product #{i}", ["red", "blue"].sample, rand(10)] }
45
-
46
- puts "Imported"
47
-
48
- result = nil
49
- report = nil
50
- stats = nil
51
-
52
- # p GetProcessMem.new.mb
53
-
54
- Product.searchkick_index.delete rescue nil
55
-
56
- time =
57
- Benchmark.realtime do
58
- # result = RubyProf.profile do
59
- # report = MemoryProfiler.report do
60
- # stats = AllocationStats.trace do
61
- reindex = Product.reindex(async: true)
62
- p reindex
63
- # end
64
-
65
- 60.times do |i|
66
- if reindex.is_a?(Hash)
67
- docs = Searchkick::Index.new(reindex[:index_name]).total_docs
68
- else
69
- docs = Product.searchkick_index.total_docs
70
- end
71
- puts "#{i}: #{docs}"
72
- if docs == total_docs
73
- break
74
- end
75
- p Searchkick.reindex_status(reindex[:index_name]) if reindex.is_a?(Hash)
76
- sleep(1)
77
- # Product.searchkick_index.refresh
78
- end
79
- end
80
-
81
- # p GetProcessMem.new.mb
82
-
83
- puts time.round(1)
84
-
85
-
86
- if result
87
- printer = RubyProf::GraphPrinter.new(result)
88
- printer.print(STDOUT, min_percent: 5)
89
- end
90
-
91
- if report
92
- puts report.pretty_print
93
- end
94
-
95
- if stats
96
- puts result.allocations(alias_paths: true).group_by(:sourcefile, :class).to_text
97
- end