searchkick 2.3.2 → 5.2.1

Sign up to get free protection for your applications and to get access to all the features.
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