chewy 8.0.0 → 8.1.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +42 -0
- data/README.md +30 -16
- data/lib/chewy/errors.rb +3 -0
- data/lib/chewy/fields/root.rb +3 -3
- data/lib/chewy/index/crutch.rb +12 -2
- data/lib/chewy/index/import/bulk_builder.rb +4 -3
- data/lib/chewy/index/import/routine.rb +2 -1
- data/lib/chewy/index/import.rb +4 -4
- data/lib/chewy/index/witchcraft.rb +24 -8
- data/lib/chewy/multi_search.rb +1 -1
- data/lib/chewy/search/parameters/runtime_mappings.rb +14 -0
- data/lib/chewy/search/request.rb +18 -2
- data/lib/chewy/search/scrolling.rb +14 -6
- data/lib/chewy/stash.rb +10 -6
- data/lib/chewy/version.rb +1 -1
- metadata +5 -131
- data/.github/CODEOWNERS +0 -1
- data/.github/ISSUE_TEMPLATE/bug_report.md +0 -39
- data/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -16
- data/.github/dependabot.yml +0 -42
- data/.github/workflows/ruby.yml +0 -61
- data/.gitignore +0 -22
- data/.rspec +0 -2
- data/.rubocop.yml +0 -64
- data/.rubocop_todo.yml +0 -225
- data/.yardopts +0 -5
- data/CODE_OF_CONDUCT.md +0 -14
- data/CONTRIBUTING.md +0 -63
- data/Gemfile +0 -22
- data/Guardfile +0 -25
- data/Rakefile +0 -17
- data/chewy.gemspec +0 -24
- data/docker-compose.yml +0 -14
- data/docs/README.md +0 -16
- data/docs/configuration.md +0 -440
- data/docs/import.md +0 -122
- data/docs/indexing.md +0 -329
- data/docs/querying.md +0 -72
- data/docs/rake_tasks.md +0 -108
- data/docs/testing.md +0 -41
- data/docs/troubleshooting.md +0 -101
- data/filters +0 -78
- data/gemfiles/base.gemfile +0 -12
- data/gemfiles/rails.7.2.activerecord.gemfile +0 -14
- data/gemfiles/rails.8.0.activerecord.gemfile +0 -14
- data/migration_guide.md +0 -56
- data/spec/chewy/config_spec.rb +0 -110
- data/spec/chewy/elastic_client_spec.rb +0 -26
- data/spec/chewy/fields/base_spec.rb +0 -700
- data/spec/chewy/fields/root_spec.rb +0 -142
- data/spec/chewy/fields/time_fields_spec.rb +0 -28
- data/spec/chewy/index/actions_spec.rb +0 -851
- data/spec/chewy/index/adapter/active_record_spec.rb +0 -663
- data/spec/chewy/index/adapter/object_spec.rb +0 -243
- data/spec/chewy/index/aliases_spec.rb +0 -49
- data/spec/chewy/index/import/bulk_builder_spec.rb +0 -494
- data/spec/chewy/index/import/bulk_request_spec.rb +0 -95
- data/spec/chewy/index/import/journal_builder_spec.rb +0 -87
- data/spec/chewy/index/import/routine_spec.rb +0 -110
- data/spec/chewy/index/import_spec.rb +0 -615
- data/spec/chewy/index/mapping_spec.rb +0 -135
- data/spec/chewy/index/observe/active_record_methods_spec.rb +0 -68
- data/spec/chewy/index/observe/callback_spec.rb +0 -139
- data/spec/chewy/index/observe_spec.rb +0 -143
- data/spec/chewy/index/settings_spec.rb +0 -136
- data/spec/chewy/index/specification_spec.rb +0 -156
- data/spec/chewy/index/syncer_spec.rb +0 -118
- data/spec/chewy/index/witchcraft_spec.rb +0 -245
- data/spec/chewy/index/wrapper_spec.rb +0 -100
- data/spec/chewy/index_spec.rb +0 -269
- data/spec/chewy/journal_spec.rb +0 -223
- data/spec/chewy/minitest/helpers_spec.rb +0 -194
- data/spec/chewy/minitest/search_index_receiver_spec.rb +0 -120
- data/spec/chewy/multi_search_spec.rb +0 -84
- data/spec/chewy/rake_helper_spec.rb +0 -656
- data/spec/chewy/repository_spec.rb +0 -50
- data/spec/chewy/rspec/build_query_spec.rb +0 -34
- data/spec/chewy/rspec/helpers_spec.rb +0 -61
- data/spec/chewy/rspec/update_index_spec.rb +0 -313
- data/spec/chewy/runtime/version_spec.rb +0 -48
- data/spec/chewy/runtime_spec.rb +0 -9
- data/spec/chewy/search/loader_spec.rb +0 -83
- data/spec/chewy/search/pagination/kaminari_examples.rb +0 -69
- data/spec/chewy/search/pagination/kaminari_spec.rb +0 -21
- data/spec/chewy/search/parameters/aggs_spec.rb +0 -5
- data/spec/chewy/search/parameters/bool_storage_examples.rb +0 -53
- data/spec/chewy/search/parameters/collapse_spec.rb +0 -5
- data/spec/chewy/search/parameters/docvalue_fields_spec.rb +0 -5
- data/spec/chewy/search/parameters/explain_spec.rb +0 -5
- data/spec/chewy/search/parameters/filter_spec.rb +0 -5
- data/spec/chewy/search/parameters/hash_storage_examples.rb +0 -59
- data/spec/chewy/search/parameters/highlight_spec.rb +0 -5
- data/spec/chewy/search/parameters/ignore_unavailable_spec.rb +0 -67
- data/spec/chewy/search/parameters/indices_spec.rb +0 -99
- data/spec/chewy/search/parameters/integer_storage_examples.rb +0 -32
- data/spec/chewy/search/parameters/knn_spec.rb +0 -5
- data/spec/chewy/search/parameters/limit_spec.rb +0 -5
- data/spec/chewy/search/parameters/load_spec.rb +0 -60
- data/spec/chewy/search/parameters/min_score_spec.rb +0 -32
- data/spec/chewy/search/parameters/none_spec.rb +0 -5
- data/spec/chewy/search/parameters/offset_spec.rb +0 -5
- data/spec/chewy/search/parameters/order_spec.rb +0 -72
- data/spec/chewy/search/parameters/post_filter_spec.rb +0 -5
- data/spec/chewy/search/parameters/preference_spec.rb +0 -5
- data/spec/chewy/search/parameters/profile_spec.rb +0 -5
- data/spec/chewy/search/parameters/query_spec.rb +0 -5
- data/spec/chewy/search/parameters/query_storage_examples.rb +0 -434
- data/spec/chewy/search/parameters/request_cache_spec.rb +0 -67
- data/spec/chewy/search/parameters/rescore_spec.rb +0 -62
- data/spec/chewy/search/parameters/script_fields_spec.rb +0 -5
- data/spec/chewy/search/parameters/search_after_spec.rb +0 -35
- data/spec/chewy/search/parameters/search_type_spec.rb +0 -5
- data/spec/chewy/search/parameters/source_spec.rb +0 -162
- data/spec/chewy/search/parameters/storage_spec.rb +0 -60
- data/spec/chewy/search/parameters/stored_fields_spec.rb +0 -126
- data/spec/chewy/search/parameters/string_array_storage_examples.rb +0 -63
- data/spec/chewy/search/parameters/string_storage_examples.rb +0 -32
- data/spec/chewy/search/parameters/suggest_spec.rb +0 -5
- data/spec/chewy/search/parameters/terminate_after_spec.rb +0 -5
- data/spec/chewy/search/parameters/timeout_spec.rb +0 -5
- data/spec/chewy/search/parameters/track_scores_spec.rb +0 -5
- data/spec/chewy/search/parameters/track_total_hits_spec.rb +0 -5
- data/spec/chewy/search/parameters/version_spec.rb +0 -5
- data/spec/chewy/search/parameters_spec.rb +0 -161
- data/spec/chewy/search/query_proxy_spec.rb +0 -95
- data/spec/chewy/search/request_spec.rb +0 -886
- data/spec/chewy/search/response_spec.rb +0 -180
- data/spec/chewy/search/scrolling_spec.rb +0 -171
- data/spec/chewy/search_spec.rb +0 -127
- data/spec/chewy/stash_spec.rb +0 -85
- data/spec/chewy/strategy/active_job_spec.rb +0 -73
- data/spec/chewy/strategy/atomic_no_refresh_spec.rb +0 -60
- data/spec/chewy/strategy/atomic_spec.rb +0 -61
- data/spec/chewy/strategy/delayed_sidekiq_spec.rb +0 -225
- data/spec/chewy/strategy/lazy_sidekiq_spec.rb +0 -214
- data/spec/chewy/strategy/sidekiq_spec.rb +0 -52
- data/spec/chewy/strategy_spec.rb +0 -125
- data/spec/chewy_spec.rb +0 -100
- data/spec/spec_helper.rb +0 -69
- data/spec/support/active_record.rb +0 -124
- data/spec/support/class_helpers.rb +0 -16
- data/spec/support/fail_helpers.rb +0 -13
data/docs/troubleshooting.md
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
# Troubleshooting
|
|
2
|
-
|
|
3
|
-
## `UndefinedUpdateStrategy` error
|
|
4
|
-
|
|
5
|
-
This is the most common Chewy error. When you save a model that has an `update_index` callback and no update strategy is active, Chewy raises `Chewy::UndefinedUpdateStrategy`:
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
Index update strategy is undefined for current context.
|
|
9
|
-
Please wrap your code with `Chewy.strategy(:strategy_name)` block.
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
**Fix:** wrap the code that triggers the save in a strategy block:
|
|
13
|
-
|
|
14
|
-
```ruby
|
|
15
|
-
Chewy.strategy(:atomic) do
|
|
16
|
-
city.save!
|
|
17
|
-
end
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
In a Rails app, controller actions already use the `:atomic` strategy by default. This error typically appears in background jobs, rake tasks, or console sessions. For console use, you can set `:urgent` as a persistent strategy:
|
|
21
|
-
|
|
22
|
-
```ruby
|
|
23
|
-
Chewy.strategy(:urgent)
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
If you want to suppress index updates entirely (e.g. in tests or migrations), use `:bypass`:
|
|
27
|
-
|
|
28
|
-
```ruby
|
|
29
|
-
Chewy.root_strategy = :bypass
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
See [configuration.md](configuration.md#index-update-strategies) for the full list of strategies.
|
|
33
|
-
|
|
34
|
-
## Elasticsearch 8 security defaults
|
|
35
|
-
|
|
36
|
-
Elasticsearch 8 enables security (TLS + authentication) by default. If you see connection refused or authentication errors after upgrading, you need to configure credentials and the CA certificate. See the [Security section](../README.md#security) in the main README for setup instructions.
|
|
37
|
-
|
|
38
|
-
## Wildcard index deletion disabled in ES 8
|
|
39
|
-
|
|
40
|
-
Starting from Elasticsearch 8, wildcard deletion of indices is disabled by default. If `Chewy.massacre` or other bulk-delete operations fail with a `Chewy::FeatureDisabled` error, you need to set the cluster setting `action.destructive_requires_name` to `false`:
|
|
41
|
-
|
|
42
|
-
```
|
|
43
|
-
PUT _cluster/settings
|
|
44
|
-
{ "persistent": { "action.destructive_requires_name": false } }
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Import errors and debugging
|
|
48
|
-
|
|
49
|
-
When using `import!` (with a bang), Chewy raises `Chewy::ImportFailed` if any documents fail to index. The error message groups failures by action type (index, delete) and includes the document IDs:
|
|
50
|
-
|
|
51
|
-
```
|
|
52
|
-
Import failed for `ProductsIndex` with:
|
|
53
|
-
Index errors:
|
|
54
|
-
`mapper_parsing_exception`
|
|
55
|
-
on 3 documents: ["1", "2", "3"]
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
For non-bang `import`, errors are silently swallowed. To debug import issues, set up a logger:
|
|
59
|
-
|
|
60
|
-
```ruby
|
|
61
|
-
Chewy.logger = Logger.new(STDOUT)
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
You can also subscribe to `import_objects.chewy` notifications — see [configuration.md](configuration.md#activesupportnotifications-support) for the payload format.
|
|
65
|
-
|
|
66
|
-
## Import scope cleanup warnings
|
|
67
|
-
|
|
68
|
-
When an `index_scope` includes `order`, `limit`, or `offset`, Chewy strips them before importing (they don't make sense for batch processing). By default this logs a warning. If you see unexpected warnings during import, you can control this via:
|
|
69
|
-
|
|
70
|
-
```ruby
|
|
71
|
-
Chewy.import_scope_cleanup_behavior = :ignore # no warning
|
|
72
|
-
Chewy.import_scope_cleanup_behavior = :raise # raise Chewy::ImportScopeCleanupError
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
See [configuration.md](configuration.md#import-scope-clean-up-behavior) for details.
|
|
76
|
-
|
|
77
|
-
## Missing optional dependencies
|
|
78
|
-
|
|
79
|
-
Some Chewy features require additional gems that are not listed as hard dependencies:
|
|
80
|
-
|
|
81
|
-
- **`parallel`** — required for `chewy:parallel:*` rake tasks. Install it with `gem 'parallel'` in your Gemfile.
|
|
82
|
-
- **`method_source`** — required for the Witchcraft technology (compiled value procs). Install it with `gem 'method_source'`.
|
|
83
|
-
|
|
84
|
-
If these gems are missing you'll get a `LoadError` when the relevant feature is used.
|
|
85
|
-
|
|
86
|
-
## Pre-request filter
|
|
87
|
-
|
|
88
|
-
Should you need to inspect the query prior to it being dispatched to Elasticsearch during any queries, you can use the `before_es_request_filter`. `before_es_request_filter` is a callable object, as demonstrated below:
|
|
89
|
-
|
|
90
|
-
```ruby
|
|
91
|
-
Chewy.before_es_request_filter = -> (method_name, args, kw_args) { ... }
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
While using the `before_es_request_filter`, please consider the following:
|
|
95
|
-
|
|
96
|
-
* `before_es_request_filter` acts as a simple proxy before any request made via the `Elasticsearch::Client`. The arguments passed to this filter include:
|
|
97
|
-
* `method_name` — the name of the method being called (e.g. search, count, bulk).
|
|
98
|
-
* `args` and `kw_args` — the positional and keyword arguments provided in the method call.
|
|
99
|
-
* The operation is synchronous, so avoid executing any heavy or time-consuming operations within the filter to prevent performance degradation.
|
|
100
|
-
* The return value of the proc is disregarded. This filter is intended for inspection or modification of the query rather than generating a response.
|
|
101
|
-
* Any exception raised inside the callback will propagate upward and halt the execution of the query. It is essential to handle potential errors adequately to ensure the stability of your search functionality.
|
data/filters
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
term
|
|
2
|
-
name == 'value'
|
|
3
|
-
name != 'value'
|
|
4
|
-
terms
|
|
5
|
-
name == ['value1', 'value2'] plain
|
|
6
|
-
name != ['value1', 'value2']
|
|
7
|
-
|
|
8
|
-
name(:&) == ['value1', 'value2'] or
|
|
9
|
-
name(:|) == ['value1', 'value2'] and
|
|
10
|
-
name(:b) == ['value1', 'value2'] bool
|
|
11
|
-
name(:f) == ['value1', 'value2'] fielddata
|
|
12
|
-
regexp
|
|
13
|
-
name == /regexp/
|
|
14
|
-
name =~ /regexp/
|
|
15
|
-
name != /regexp/
|
|
16
|
-
name !~ /regexp/
|
|
17
|
-
name(:anystring, :intersection) == /regexp/
|
|
18
|
-
prefix
|
|
19
|
-
name =~ 'pref'
|
|
20
|
-
name !~ 'pref'
|
|
21
|
-
|
|
22
|
-
exists
|
|
23
|
-
name?
|
|
24
|
-
missing
|
|
25
|
-
!name
|
|
26
|
-
!name?
|
|
27
|
-
name == nil
|
|
28
|
-
|
|
29
|
-
numeric_range Numeric
|
|
30
|
-
range Other
|
|
31
|
-
date >= Date.today
|
|
32
|
-
date > Date.today
|
|
33
|
-
date <= Date.today
|
|
34
|
-
date < Date.today
|
|
35
|
-
|
|
36
|
-
date == (2.days.ago..3.days.since) ()
|
|
37
|
-
date == [2.days.ago..3.days.since] []
|
|
38
|
-
|
|
39
|
-
bool
|
|
40
|
-
must(name == 'name', email == 'email')
|
|
41
|
-
.should(name == 'name', email == 'email')
|
|
42
|
-
.must_not(name == 'name', email == 'email')
|
|
43
|
-
and
|
|
44
|
-
(name == 'name') & (email == 'email')
|
|
45
|
-
or
|
|
46
|
-
(name == 'name') | (email == 'email')
|
|
47
|
-
not
|
|
48
|
-
!(name == 'name')
|
|
49
|
-
email != 'email'
|
|
50
|
-
|
|
51
|
-
script s()
|
|
52
|
-
match all
|
|
53
|
-
match_all
|
|
54
|
-
|
|
55
|
-
has child
|
|
56
|
-
has_child('type').query()
|
|
57
|
-
has_child('type').filter()
|
|
58
|
-
has parent
|
|
59
|
-
has_parent('type').query()
|
|
60
|
-
has_parent('type').filter()
|
|
61
|
-
nested
|
|
62
|
-
name.nested()
|
|
63
|
-
|
|
64
|
-
query q()
|
|
65
|
-
type
|
|
66
|
-
.types()
|
|
67
|
-
|
|
68
|
-
geo bounding box
|
|
69
|
-
geo distance
|
|
70
|
-
geo distance range
|
|
71
|
-
geo polygon
|
|
72
|
-
geoshape
|
|
73
|
-
geohash cell
|
|
74
|
-
|
|
75
|
-
indices
|
|
76
|
-
ids
|
|
77
|
-
|
|
78
|
-
limit
|
data/gemfiles/base.gemfile
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
gem 'database_cleaner'
|
|
2
|
-
gem 'elasticsearch-extensions'
|
|
3
|
-
gem 'method_source'
|
|
4
|
-
gem 'rake'
|
|
5
|
-
gem 'redis', require: false
|
|
6
|
-
gem 'rspec', '>= 3.7.0'
|
|
7
|
-
gem 'rspec-collection_matchers'
|
|
8
|
-
gem 'rspec-its'
|
|
9
|
-
gem 'rubocop', '1.84.2'
|
|
10
|
-
gem 'sqlite3', '~> 2.1'
|
|
11
|
-
gem 'timecop'
|
|
12
|
-
gem 'unparser', '~> 0.6.15'
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
source 'https://rubygems.org'
|
|
2
|
-
|
|
3
|
-
gem 'activejob', '~> 7.2.0'
|
|
4
|
-
gem 'activerecord', '~> 7.2.0'
|
|
5
|
-
gem 'activesupport', '~> 7.2.0'
|
|
6
|
-
gem 'kaminari-core', '~> 1.1.0', require: false
|
|
7
|
-
gem 'parallel', require: false
|
|
8
|
-
gem 'rspec_junit_formatter', '~> 0.4.1'
|
|
9
|
-
gem 'sidekiq', require: false
|
|
10
|
-
|
|
11
|
-
gem 'rexml'
|
|
12
|
-
|
|
13
|
-
gemspec path: '../'
|
|
14
|
-
eval_gemfile 'base.gemfile'
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
source 'https://rubygems.org'
|
|
2
|
-
|
|
3
|
-
gem 'activejob', '~> 8.0.0'
|
|
4
|
-
gem 'activerecord', '~> 8.0.0'
|
|
5
|
-
gem 'activesupport', '~> 8.0.0'
|
|
6
|
-
gem 'kaminari-core', '~> 1.1.0', require: false
|
|
7
|
-
gem 'parallel', require: false
|
|
8
|
-
gem 'rspec_junit_formatter', '~> 0.4.1'
|
|
9
|
-
gem 'sidekiq', require: false
|
|
10
|
-
|
|
11
|
-
gem 'rexml'
|
|
12
|
-
|
|
13
|
-
gemspec path: '../'
|
|
14
|
-
eval_gemfile 'base.gemfile'
|
data/migration_guide.md
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
# Migration guide
|
|
2
|
-
|
|
3
|
-
This document outlines the steps you need to take when migrating between major versions of
|
|
4
|
-
Chewy and Elasticsearch. For simplicity's sake the guide will assume that you're using
|
|
5
|
-
Chewy alongside a matching Elasticsearch version.
|
|
6
|
-
|
|
7
|
-
## Chewy 6/Elasticsearch 6 to Chewy 7/Elasticsearch 7
|
|
8
|
-
|
|
9
|
-
In order to upgrade Chewy 6/Elasticsearch 6 to Chewy 7/Elasticsearch 7 in the most seamless manner you have to:
|
|
10
|
-
|
|
11
|
-
* Upgrade to the latest 6.x stable releases, namely Chewy 6.0, Elasticsearch 6.8
|
|
12
|
-
* Study carefully [Breaking changes in 7.0](https://www.elastic.co/guide/en/elasticsearch/reference/7.17/breaking-changes-7.0.html), make sure your application conforms.
|
|
13
|
-
* Run your test suite on Chewy 7.0 / Elasticsearch 7
|
|
14
|
-
* Run manual tests on Chewy 7.0 / Elasticsearch 7
|
|
15
|
-
* Upgrade to Chewy 7.0
|
|
16
|
-
* The “total hits” counter is an integer for ES versions < 7 and an object (hash) for the versions starting from 7.0.0. Elasticsearch added a special option, `rest_total_hits_as_int`, to ease the upgrade, that could be appended to any request and results in the old “total hits” format. Unfortunately, this option is not recognized by ES versions prior to 7.0.0, which means that we have to check the version to decide if we need this option.
|
|
17
|
-
Normally Chewy does memoization of the current ES version, but this might be inappropriate for the upgrade, as the version changes live.
|
|
18
|
-
To handle that we have 2 versions of Chewy for this stage of the upgrade: 7.0.0 and 7.0.1. Version 7.0.0 does the memoization and version 7.0.1 requests the current version on every search request.
|
|
19
|
-
* You can use the 7.0.0 version if it's fine for you to have an application restart immediately after ES cluster upgrade.
|
|
20
|
-
* If you're using the 7.0.1 version you might be interested in keeping the timeframe between this step and updating to Chewy 7.1 as small as possible, as version 7.0.1 skips ES version memoization for search requests to help dynamically detect ES version. This leads to an extra version request on each search request, i.e. could affect the overall performance/latency of the search and a load of ES cluster.
|
|
21
|
-
* Perform a [rolling upgrade](https://www.elastic.co/guide/en/elasticsearch/reference//rolling-upgrades.html) of Elasticsearch
|
|
22
|
-
* Run your test suite on Chewy 7.1 / Elasticsearch 7
|
|
23
|
-
* Run manual tests on Chewy 7.1 / Elasticsearch 7
|
|
24
|
-
* Upgrade to Chewy 7.1
|
|
25
|
-
* Upgrade to Chewy 7.2:
|
|
26
|
-
* Remove all the `Chewy::Type` class usages, e.g. remove `CitiesIndex::City` / `CitiesIndex.city`
|
|
27
|
-
* `CitiesIndex::City.import! ...` becomes `CitiesIndex.import! ...`
|
|
28
|
-
* Update indexes with simplified DSL:
|
|
29
|
-
* `define_type` block -> `index_scope` clause
|
|
30
|
-
* it can be omitted completely, if you don't need to specify the scope or options, e.g. `name`
|
|
31
|
-
* Remove type names from string representations:
|
|
32
|
-
* in `update_index` ActiveRecord helper and RSpec matcher, e.g.
|
|
33
|
-
* `update_index('cities#city')` -> `update_index('cities')`
|
|
34
|
-
* `update_index(UsersIndex::User)` -> `update_index(UsersIndex)`
|
|
35
|
-
* in rake tasks (e.g. `rake chewy:update[cities#city]` -> `rake chewy:update[cities]`)
|
|
36
|
-
* rake tasks output is also changed (e.g. `Imported CitiesIndex::City in 1s, stats: index 3` -> `Imported CitiesIndex in 1s, stats: index 3`)
|
|
37
|
-
* Use index name instead of type name in loader additional scope
|
|
38
|
-
* e.g. `CitiesIndex.filter(...).load(city: {scope: City.where(...)})` -> `CitiesIndex.filter(...).load(cities: {scope: City.where(...)})`
|
|
39
|
-
|
|
40
|
-
## Chewy 5/Elasticsearch 5 to Chewy 6/Elasticsearch 6
|
|
41
|
-
|
|
42
|
-
In order to upgrade Chewy 5/Elasticsearch 5 to Chewy 6/Elasticsearch 6 in the most seamless manner you have to:
|
|
43
|
-
|
|
44
|
-
* Upgrade to the latest 5.x stable releases, namely Chewy 5.2, Elasticsearch 5.6
|
|
45
|
-
* [Migrate any multi-typed indexes into single-typed](https://www.elastic.co/guide/en/elasticsearch/reference/6.8/removal-of-types.html)
|
|
46
|
-
* Using [multi-index queries](https://github.com/toptal/chewy/pull/657) could be helpful
|
|
47
|
-
* Parent/Child [relationship is deprecated](https://www.elastic.co/guide/en/elasticsearch/reference/6.8/removal-of-types.html#parent-child-mapping-types) in favor of the [join field](https://www.elastic.co/guide/en/elasticsearch/reference/6.8/parent-join.html)
|
|
48
|
-
* Handle deprecation of `string` type & `not_analyzed` value for the `index` mapping parameter:
|
|
49
|
-
* replace fields with `{ type: 'string', index: 'not_analyzed'}` by `{type: 'keyword'}`
|
|
50
|
-
* replace fields with `{ type: 'string', index: 'analyzed'}` by `{type: 'text'}`
|
|
51
|
-
* `PathHierarchy` tokenizer' param `delimiter` now accepts only one argument, [others should be replaced by character filter ](https://discuss.elastic.co/t/multichar-delimiter-in-path-hierarchy-tokenizer/16203)
|
|
52
|
-
* Make sure you don't use any other of the [deprecated Elasticsearch 5 features](https://www.elastic.co/guide/en/elasticsearch/reference/6.8/breaking-changes-6.0.html)
|
|
53
|
-
* Run your test suite on Chewy 6 / Elasticsearch 6
|
|
54
|
-
* Run manual tests on Chewy 6 / Elasticsearch 6
|
|
55
|
-
* Upgrade to Chewy 6
|
|
56
|
-
* Perform a [rolling upgrade](https://www.elastic.co/guide/en/elasticsearch/reference/6.8/rolling-upgrades.html) of Elasticsearch
|
data/spec/chewy/config_spec.rb
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Chewy::Config do
|
|
4
|
-
subject { described_class.send(:new) }
|
|
5
|
-
|
|
6
|
-
specify { expect(subject.logger).to be_nil }
|
|
7
|
-
specify { expect(subject.transport_logger).to be_nil }
|
|
8
|
-
specify { expect(subject.root_strategy).to eq(:base) }
|
|
9
|
-
specify { expect(subject.request_strategy).to eq(:atomic) }
|
|
10
|
-
specify { expect(subject.console_strategy).to eq(:urgent) }
|
|
11
|
-
specify { expect(subject.use_after_commit_callbacks).to eq(true) }
|
|
12
|
-
specify { expect(subject.indices_path).to eq('app/chewy') }
|
|
13
|
-
specify { expect(subject.reset_disable_refresh_interval).to eq(false) }
|
|
14
|
-
specify { expect(subject.reset_no_replicas).to eq(false) }
|
|
15
|
-
specify { expect(subject.disable_refresh_async).to eq(false) }
|
|
16
|
-
specify { expect(subject.search_class).to be < Chewy::Search::Request }
|
|
17
|
-
|
|
18
|
-
describe '#transport_logger=' do
|
|
19
|
-
let(:logger) { Logger.new('/dev/null') }
|
|
20
|
-
after { subject.transport_logger = nil }
|
|
21
|
-
|
|
22
|
-
specify do
|
|
23
|
-
expect { subject.transport_logger = logger }
|
|
24
|
-
.to change { Chewy.client.transport.logger }.to(logger)
|
|
25
|
-
end
|
|
26
|
-
specify do
|
|
27
|
-
expect { subject.transport_logger = logger }
|
|
28
|
-
.to change { subject.transport_logger }.to(logger)
|
|
29
|
-
end
|
|
30
|
-
specify do
|
|
31
|
-
expect { subject.transport_logger = logger }
|
|
32
|
-
.to change { subject.configuration[:logger] }.from(nil).to(logger)
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
describe '#transport_tracer=' do
|
|
37
|
-
let(:tracer) { Logger.new('/dev/null') }
|
|
38
|
-
after { subject.transport_tracer = nil }
|
|
39
|
-
|
|
40
|
-
specify do
|
|
41
|
-
expect { subject.transport_tracer = tracer }
|
|
42
|
-
.to change { Chewy.client.transport.tracer }.to(tracer)
|
|
43
|
-
end
|
|
44
|
-
specify do
|
|
45
|
-
expect { subject.transport_tracer = tracer }
|
|
46
|
-
.to change { subject.transport_tracer }.to(tracer)
|
|
47
|
-
end
|
|
48
|
-
specify do
|
|
49
|
-
expect { subject.transport_tracer = tracer }
|
|
50
|
-
.to change { subject.configuration[:tracer] }.from(nil).to(tracer)
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
describe '#search_class' do
|
|
55
|
-
context 'nothing is defined' do
|
|
56
|
-
before do
|
|
57
|
-
hide_const('Kaminari')
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
specify do
|
|
61
|
-
expect(subject.search_class.included_modules)
|
|
62
|
-
.not_to include(Chewy::Search::Pagination::Kaminari)
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
context 'kaminari' do
|
|
67
|
-
specify do
|
|
68
|
-
expect(subject.search_class.included_modules)
|
|
69
|
-
.to include(Chewy::Search::Pagination::Kaminari)
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
describe '#configuration' do
|
|
75
|
-
before { subject.settings = {indices_path: 'app/custom_indices_path'} }
|
|
76
|
-
|
|
77
|
-
specify do
|
|
78
|
-
expect(subject.configuration).to include(indices_path: 'app/custom_indices_path')
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
context 'when Rails::VERSION constant is defined' do
|
|
82
|
-
it 'looks for configuration in "config/chewy.yml"' do
|
|
83
|
-
module Rails
|
|
84
|
-
VERSION = '5.1.1'.freeze
|
|
85
|
-
|
|
86
|
-
def self.root
|
|
87
|
-
Pathname.new(__dir__)
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
expect(File).to receive(:exist?)
|
|
92
|
-
.with(Pathname.new(__dir__).join('config', 'chewy.yml'))
|
|
93
|
-
subject.configuration
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
describe '.console_strategy' do
|
|
99
|
-
context 'sets .console_strategy' do
|
|
100
|
-
let(:default_strategy) { subject.console_strategy }
|
|
101
|
-
let(:new_strategy) { :atomic }
|
|
102
|
-
after { subject.console_strategy = default_strategy }
|
|
103
|
-
|
|
104
|
-
specify do
|
|
105
|
-
expect { subject.console_strategy = new_strategy }
|
|
106
|
-
.to change { subject.console_strategy }.to(new_strategy)
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
end
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Chewy::ElasticClient do
|
|
4
|
-
describe 'payload inspection' do
|
|
5
|
-
let(:filter) { instance_double('Proc') }
|
|
6
|
-
let!(:filter_previous_value) { Chewy.before_es_request_filter }
|
|
7
|
-
|
|
8
|
-
before do
|
|
9
|
-
drop_indices
|
|
10
|
-
stub_index(:products) do
|
|
11
|
-
field :id, type: :integer
|
|
12
|
-
end
|
|
13
|
-
ProductsIndex.create
|
|
14
|
-
Chewy.before_es_request_filter = filter
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
after do
|
|
18
|
-
Chewy.before_es_request_filter = filter_previous_value
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it 'call filter with the request body' do
|
|
22
|
-
expect(filter).to receive(:call).with(:search, [{body: {size: 0}, index: ['products']}], {})
|
|
23
|
-
Chewy.client.search({index: ['products'], body: {size: 0}}).to_a
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|