esse 0.4.0.rc2 → 0.4.0.rc3
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/lib/esse/cli/index.rb +4 -3
- data/lib/esse/cli/parser/bool_or_hash.rb +52 -0
- data/lib/esse/cli.rb +1 -0
- data/lib/esse/events.rb +1 -0
- data/lib/esse/index/documents.rb +14 -0
- data/lib/esse/index/indices.rb +31 -6
- data/lib/esse/transport/{health.rb → cluster.rb} +28 -0
- data/lib/esse/transport/documents.rb +98 -0
- data/lib/esse/transport/indices.rb +0 -52
- data/lib/esse/transport.rb +1 -1
- data/lib/esse/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5dd8f8e268f5c33ed55b160ca803a3d3b4d3c4e7a806b93941b53281325291fb
|
4
|
+
data.tar.gz: 4b9437a67ff80a09b3951174c60e4658b987f08633dd2ca124fde50cb2cca0b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c35caa2948ee2c511e4f0171bfd23b92a3ccf6812bcbc4c1f7b007d8e3c42912aa483b1a9baa00b75a54f66de6ad92de1087c4b87d174eab9364931d7a22c3c9
|
7
|
+
data.tar.gz: 3944a4f0ab6e2b73fe9f52a6dff26b64d1d1ed927f40f7b1eaf42f7b27898b7232c79068cefd9395433838fe8697151b02ccb1166d4d8f4eef186a36729a5881
|
data/lib/esse/cli/index.rb
CHANGED
@@ -15,13 +15,15 @@ module Esse
|
|
15
15
|
* Delete the old index.
|
16
16
|
DESC
|
17
17
|
option :suffix, type: :string, default: nil, aliases: '-s', desc: 'Suffix to append to index name'
|
18
|
-
option :import,
|
19
|
-
option :reindex,
|
18
|
+
option :import, desc: 'Import documents before point alias to the new index'
|
19
|
+
option :reindex, desc: 'Use _reindex API to import documents from the old index to the new index'
|
20
20
|
option :optimize, type: :boolean, default: true, desc: 'Optimize index before import documents by disabling refresh_interval and setting number_of_replicas to 0'
|
21
21
|
option :settings, type: :hash, default: nil, desc: 'List of settings to pass to the index class. Example: --settings=refresh_interval:1s,number_of_replicas:0'
|
22
22
|
def reset(*index_classes)
|
23
23
|
require_relative 'index/reset'
|
24
24
|
opts = HashUtils.deep_transform_keys(options.to_h, &:to_sym)
|
25
|
+
opts[:reindex] = Parser::BoolOrHash.new(:reindex, default: false).parse(opts[:reindex])
|
26
|
+
opts[:import] = Parser::BoolOrHash.new(:import, default: true).parse(opts[:import])
|
25
27
|
if opts[:import] && opts[:reindex]
|
26
28
|
raise ArgumentError, 'You cannot use --import and --reindex together'
|
27
29
|
end
|
@@ -100,7 +102,6 @@ module Esse
|
|
100
102
|
option :preload_lazy_attributes, type: :string, default: nil, desc: 'Command separated list of lazy document attributes to preload using search API before the bulk import. Or pass `true` to preload all lazy attributes'
|
101
103
|
option :eager_load_lazy_attributes, type: :string, default: nil, desc: 'Comma separated list of lazy document attributes to include to the bulk index request. Or pass `true` to include all lazy attributes'
|
102
104
|
option :update_lazy_attributes, type: :string, default: nil, desc: 'Comma separated list of lazy document attributes to bulk update after the bulk index request Or pass `true` to include all lazy attributes'
|
103
|
-
|
104
105
|
def import(*index_classes)
|
105
106
|
require_relative 'index/import'
|
106
107
|
opts = HashUtils.deep_transform_keys(options.to_h, &:to_sym)
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Esse
|
4
|
+
module CLI
|
5
|
+
module Parser
|
6
|
+
FALSEY = [false, 'false', 'FALSE', 'f', 'F'].freeze
|
7
|
+
TRUTHY = [true, 'true', 'TRUE', 't', 'T'].freeze
|
8
|
+
HASH_MATCHER = /([\w\.\-]+)\:([^\s]+)/.freeze
|
9
|
+
HASH_SEPARATOR = /[\s]+/.freeze
|
10
|
+
ARRAY_SEPARATOR = /[\,]+/.freeze
|
11
|
+
|
12
|
+
class BoolOrHash
|
13
|
+
def initialize(key, default: nil)
|
14
|
+
@key = key
|
15
|
+
@default = default
|
16
|
+
end
|
17
|
+
|
18
|
+
def parse(input)
|
19
|
+
return true if TRUTHY.include?(input)
|
20
|
+
return false if FALSEY.include?(input)
|
21
|
+
return input if input.is_a?(Hash)
|
22
|
+
return @default if input.nil?
|
23
|
+
return true if @key.to_s == input
|
24
|
+
return @default unless HASH_MATCHER.match?(input)
|
25
|
+
|
26
|
+
compact_hash = input.to_s.split(HASH_SEPARATOR).each_with_object({}) do |pair, hash|
|
27
|
+
key, val = pair.match(HASH_MATCHER).captures
|
28
|
+
hash[key.to_sym] = may_array(val)
|
29
|
+
end
|
30
|
+
return @default if compact_hash.empty?
|
31
|
+
|
32
|
+
Esse::HashUtils.explode_keys(compact_hash)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def may_array(value)
|
38
|
+
return may_bool(value) unless ARRAY_SEPARATOR.match?(value)
|
39
|
+
|
40
|
+
value.split(ARRAY_SEPARATOR).map { |v| may_bool(v) }
|
41
|
+
end
|
42
|
+
|
43
|
+
def may_bool(value)
|
44
|
+
return true if TRUTHY.include?(value)
|
45
|
+
return false if FALSEY.include?(value)
|
46
|
+
|
47
|
+
value
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/esse/cli.rb
CHANGED
data/lib/esse/events.rb
CHANGED
data/lib/esse/index/documents.rb
CHANGED
@@ -315,6 +315,20 @@ module Esse
|
|
315
315
|
cluster.api.update_by_query(**definition)
|
316
316
|
end
|
317
317
|
|
318
|
+
# Delete documents by query
|
319
|
+
#
|
320
|
+
# @param options [Hash] Hash of paramenters that will be passed along to elasticsearch request
|
321
|
+
# @option [String, nil] :suffix The index suffix. Defaults to the nil.
|
322
|
+
#
|
323
|
+
# @return [Hash] The elasticsearch response hash
|
324
|
+
def delete_by_query(suffix: nil, **options)
|
325
|
+
definition = {
|
326
|
+
index: index_name(suffix: suffix),
|
327
|
+
}.merge(options)
|
328
|
+
cluster.may_update_type!(definition)
|
329
|
+
cluster.api.delete_by_query(**definition)
|
330
|
+
end
|
331
|
+
|
318
332
|
protected
|
319
333
|
|
320
334
|
def document?(doc)
|
data/lib/esse/index/indices.rb
CHANGED
@@ -53,8 +53,11 @@ module Esse
|
|
53
53
|
|
54
54
|
suffix ||= Esse.timestamp
|
55
55
|
suffix = Esse.timestamp while index_exist?(suffix: suffix)
|
56
|
+
syncronous_import = true
|
57
|
+
syncronous_import = false if reindex.is_a?(Hash) && reindex[:wait_for_completion] == false
|
56
58
|
|
57
|
-
|
59
|
+
optimized_creation = optimize && syncronous_import && (import || reindex)
|
60
|
+
if optimized_creation
|
58
61
|
definition = [settings_hash(settings: settings), mappings_hash].reduce(&:merge)
|
59
62
|
number_of_replicas = definition.dig(Esse::SETTING_ROOT_KEY, :index, :number_of_replicas)
|
60
63
|
refresh_interval = definition.dig(Esse::SETTING_ROOT_KEY, :index, :refresh_interval)
|
@@ -68,28 +71,50 @@ module Esse
|
|
68
71
|
if index_exist? && aliases.none?
|
69
72
|
cluster.api.delete_index(index: index_name)
|
70
73
|
end
|
74
|
+
|
71
75
|
if import
|
72
76
|
import_kwargs = import.is_a?(Hash) ? import : {}
|
73
|
-
import_kwargs[:refresh] ||= refresh
|
77
|
+
import_kwargs[:refresh] ||= refresh unless refresh.nil?
|
74
78
|
import(**options, **import_kwargs, suffix: suffix)
|
75
79
|
elsif reindex && (source_indexes = indices_pointing_to_alias).any?
|
76
80
|
reindex_kwargs = reindex.is_a?(Hash) ? reindex : {}
|
77
|
-
reindex_kwargs[:
|
81
|
+
reindex_kwargs[:refresh] ||= refresh unless refresh.nil?
|
78
82
|
source_indexes.each do |from|
|
79
|
-
|
83
|
+
reindex(**reindex_kwargs, body: {
|
84
|
+
source: { index: from },
|
85
|
+
dest: { index: index_name(suffix: suffix) }
|
86
|
+
})
|
80
87
|
end
|
81
88
|
end
|
82
89
|
|
83
|
-
if
|
90
|
+
if optimized_creation && number_of_replicas != new_number_of_replicas || refresh_interval != new_refresh_interval
|
84
91
|
update_settings(suffix: suffix, settings: settings)
|
85
92
|
refresh(suffix: suffix)
|
86
93
|
end
|
87
94
|
|
88
|
-
update_aliases(suffix: suffix)
|
95
|
+
update_aliases(suffix: suffix) if syncronous_import
|
89
96
|
|
90
97
|
true
|
91
98
|
end
|
92
99
|
|
100
|
+
# Copies documents from a source to a destination.
|
101
|
+
#
|
102
|
+
# To avoid http timeout, we are sending the request with `wait_for_completion: false` and polling the task
|
103
|
+
# until it is completed.
|
104
|
+
#
|
105
|
+
# @see https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html
|
106
|
+
def reindex(body:, wait_for_completion: true, scroll: '30m', poll_interval: 5, **options)
|
107
|
+
resp = cluster.api.reindex(**options, body: body, scroll: scroll, wait_for_completion: false)
|
108
|
+
return resp unless wait_for_completion
|
109
|
+
|
110
|
+
task_id = resp['task']
|
111
|
+
task = nil
|
112
|
+
while (task = cluster.api.task(id: task_id))['completed'] == false
|
113
|
+
sleep poll_interval
|
114
|
+
end
|
115
|
+
task
|
116
|
+
end
|
117
|
+
|
93
118
|
# Checks the index existance. Returns true or false
|
94
119
|
#
|
95
120
|
# UsersIndex.index_exist? #=> true
|
@@ -23,6 +23,34 @@ module Esse
|
|
23
23
|
def health(**options)
|
24
24
|
coerce_exception { client.cluster.health(**options) }
|
25
25
|
end
|
26
|
+
|
27
|
+
# Returns information about the tasks currently executing on one or more nodes in the cluster.
|
28
|
+
#
|
29
|
+
# @option arguments [String] :format a short version of the Accept header, e.g. json, yaml
|
30
|
+
# @option arguments [List] :nodes A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node you're connecting to, leave empty to get information from all nodes
|
31
|
+
# @option arguments [List] :actions A comma-separated list of actions that should be returned. Leave empty to return all.
|
32
|
+
# @option arguments [Boolean] :detailed Return detailed task information (default: false)
|
33
|
+
# @option arguments [String] :parent_task_id Return tasks with specified parent task id (node_id:task_number). Set to -1 to return all.
|
34
|
+
# @option arguments [List] :h Comma-separated list of column names to display
|
35
|
+
# @option arguments [Boolean] :help Return help information
|
36
|
+
# @option arguments [List] :s Comma-separated list of column names or column aliases to sort by
|
37
|
+
# @option arguments [String] :time The unit in which to display time values (options: d, h, m, s, ms, micros, nanos)
|
38
|
+
# @option arguments [Boolean] :v Verbose mode. Display column headers
|
39
|
+
# @option arguments [Hash] :headers Custom HTTP headers
|
40
|
+
#
|
41
|
+
# @see https://www.elastic.co/guide/en/elasticsearch/reference/current/tasks.html
|
42
|
+
def tasks(**options)
|
43
|
+
# coerce_exception { client.perform_request('GET', '/_tasks', options).body }
|
44
|
+
coerce_exception { client.tasks.list(**options) }
|
45
|
+
end
|
46
|
+
|
47
|
+
def task(id:, **options)
|
48
|
+
coerce_exception { client.tasks.get(task_id: id, **options) }
|
49
|
+
end
|
50
|
+
|
51
|
+
def cancel_task(id:, **options)
|
52
|
+
coerce_exception { client.tasks.cancel(task_id: id, **options) }
|
53
|
+
end
|
26
54
|
end
|
27
55
|
|
28
56
|
include InstanceMethods
|
@@ -192,6 +192,104 @@ module Esse
|
|
192
192
|
response
|
193
193
|
end
|
194
194
|
end
|
195
|
+
|
196
|
+
|
197
|
+
# Performs an update on every document in the index without changing the source,
|
198
|
+
# for example to pick up a mapping change.
|
199
|
+
#
|
200
|
+
# @option arguments [List] :index A comma-separated list of index names to search; use `_all` or empty string to perform the operation on all indices (*Required*)
|
201
|
+
# @option arguments [String] :analyzer The analyzer to use for the query string
|
202
|
+
# @option arguments [Boolean] :analyze_wildcard Specify whether wildcard and prefix queries should be analyzed (default: false)
|
203
|
+
# @option arguments [String] :default_operator The default operator for query string query (AND or OR) (options: AND, OR)
|
204
|
+
# @option arguments [String] :df The field to use as default where no field prefix is given in the query string
|
205
|
+
# @option arguments [Number] :from Starting offset (default: 0)
|
206
|
+
# @option arguments [Boolean] :ignore_unavailable Whether specified concrete indices should be ignored when unavailable (missing or closed)
|
207
|
+
# @option arguments [Boolean] :allow_no_indices Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
|
208
|
+
# @option arguments [String] :conflicts What to do when the update by query hits version conflicts? (options: abort, proceed)
|
209
|
+
# @option arguments [String] :expand_wildcards Whether to expand wildcard expression to concrete indices that are open, closed or both. (options: open, closed, hidden, none, all)
|
210
|
+
# @option arguments [Boolean] :lenient Specify whether format-based query failures (such as providing text to a numeric field) should be ignored
|
211
|
+
# @option arguments [String] :pipeline Ingest pipeline to set on index requests made by this action. (default: none)
|
212
|
+
# @option arguments [String] :preference Specify the node or shard the operation should be performed on (default: random)
|
213
|
+
# @option arguments [String] :q Query in the Lucene query string syntax
|
214
|
+
# @option arguments [List] :routing A comma-separated list of specific routing values
|
215
|
+
# @option arguments [Time] :scroll Specify how long a consistent view of the index should be maintained for scrolled search
|
216
|
+
# @option arguments [String] :search_type Search operation type (options: query_then_fetch, dfs_query_then_fetch)
|
217
|
+
# @option arguments [Time] :search_timeout Explicit timeout for each search request. Defaults to no timeout.
|
218
|
+
# @option arguments [Number] :size Deprecated, please use `max_docs` instead
|
219
|
+
# @option arguments [Number] :max_docs Maximum number of documents to process (default: all documents)
|
220
|
+
# @option arguments [List] :sort A comma-separated list of <field>:<direction> pairs
|
221
|
+
# @option arguments [List] :_source True or false to return the _source field or not, or a list of fields to return
|
222
|
+
# @option arguments [List] :_source_excludes A list of fields to exclude from the returned _source field
|
223
|
+
# @option arguments [List] :_source_includes A list of fields to extract and return from the _source field
|
224
|
+
# @option arguments [Number] :terminate_after The maximum number of documents to collect for each shard, upon reaching which the query execution will terminate early.
|
225
|
+
# @option arguments [List] :stats Specific 'tag' of the request for logging and statistical purposes
|
226
|
+
# @option arguments [Boolean] :version Specify whether to return document version as part of a hit
|
227
|
+
# @option arguments [Boolean] :version_type Should the document increment the version number (internal) on hit or not (reindex)
|
228
|
+
# @option arguments [Boolean] :request_cache Specify if request cache should be used for this request or not, defaults to index level setting
|
229
|
+
# @option arguments [Boolean] :refresh Should the affected indexes be refreshed?
|
230
|
+
# @option arguments [Time] :timeout Time each individual bulk request should wait for shards that are unavailable.
|
231
|
+
# @option arguments [String] :wait_for_active_shards Sets the number of shard copies that must be active before proceeding with the update by query operation. Defaults to 1, meaning the primary shard only. Set to `all` for all shard copies, otherwise set to any non-negative value less than or equal to the total number of copies for the shard (number of replicas + 1)
|
232
|
+
# @option arguments [Number] :scroll_size Size on the scroll request powering the update by query
|
233
|
+
# @option arguments [Boolean] :wait_for_completion Should the request should block until the update by query operation is complete.
|
234
|
+
# @option arguments [Number] :requests_per_second The throttle to set on this request in sub-requests per second. -1 means no throttle.
|
235
|
+
# @option arguments [Number|string] :slices The number of slices this task should be divided into. Defaults to 1, meaning the task isn't sliced into subtasks. Can be set to `auto`.
|
236
|
+
# @option arguments [Hash] :headers Custom HTTP headers
|
237
|
+
# @option arguments [Hash] :body The search definition using the Query DSL
|
238
|
+
#
|
239
|
+
# @see https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html
|
240
|
+
def update_by_query(index:, **options)
|
241
|
+
throw_error_when_readonly!
|
242
|
+
|
243
|
+
Esse::Events.instrument('elasticsearch.update_by_query') do |payload|
|
244
|
+
payload[:request] = opts = options.merge(index: index)
|
245
|
+
payload[:response] = coerce_exception { client.update_by_query(**opts) }
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
# Deletes documents matching the provided query.
|
250
|
+
#
|
251
|
+
# @option arguments [List] :index A comma-separated list of index names to search; use `_all` or empty string to perform the operation on all indices
|
252
|
+
# @option arguments [String] :analyzer The analyzer to use for the query string
|
253
|
+
# @option arguments [Boolean] :analyze_wildcard Specify whether wildcard and prefix queries should be analyzed (default: false)
|
254
|
+
# @option arguments [String] :default_operator The default operator for query string query (AND or OR) (options: AND, OR)
|
255
|
+
# @option arguments [String] :df The field to use as default where no field prefix is given in the query string
|
256
|
+
# @option arguments [Number] :from Starting offset (default: 0)
|
257
|
+
# @option arguments [Boolean] :ignore_unavailable Whether specified concrete indices should be ignored when unavailable (missing or closed)
|
258
|
+
# @option arguments [Boolean] :allow_no_indices Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
|
259
|
+
# @option arguments [String] :conflicts What to do when the delete by query hits version conflicts? (options: abort, proceed)
|
260
|
+
# @option arguments [String] :expand_wildcards Whether to expand wildcard expression to concrete indices that are open, closed or both. (options: open, closed, hidden, none, all)
|
261
|
+
# @option arguments [Boolean] :lenient Specify whether format-based query failures (such as providing text to a numeric field) should be ignored
|
262
|
+
# @option arguments [String] :preference Specify the node or shard the operation should be performed on (default: random)
|
263
|
+
# @option arguments [String] :q Query in the Lucene query string syntax
|
264
|
+
# @option arguments [List] :routing A comma-separated list of specific routing values
|
265
|
+
# @option arguments [Time] :scroll Specify how long a consistent view of the index should be maintained for scrolled search
|
266
|
+
# @option arguments [String] :search_type Search operation type (options: query_then_fetch, dfs_query_then_fetch)
|
267
|
+
# @option arguments [Time] :search_timeout Explicit timeout for each search request. Defaults to no timeout.
|
268
|
+
# @option arguments [Number] :max_docs Maximum number of documents to process (default: all documents)
|
269
|
+
# @option arguments [List] :sort A comma-separated list of <field>:<direction> pairs
|
270
|
+
# @option arguments [Number] :terminate_after The maximum number of documents to collect for each shard, upon reaching which the query execution will terminate early.
|
271
|
+
# @option arguments [List] :stats Specific 'tag' of the request for logging and statistical purposes
|
272
|
+
# @option arguments [Boolean] :version Specify whether to return document version as part of a hit
|
273
|
+
# @option arguments [Boolean] :request_cache Specify if request cache should be used for this request or not, defaults to index level setting
|
274
|
+
# @option arguments [Boolean] :refresh Should the affected indexes be refreshed?
|
275
|
+
# @option arguments [Time] :timeout Time each individual bulk request should wait for shards that are unavailable.
|
276
|
+
# @option arguments [String] :wait_for_active_shards Sets the number of shard copies that must be active before proceeding with the delete by query operation. Defaults to 1, meaning the primary shard only. Set to `all` for all shard copies, otherwise set to any non-negative value less than or equal to the total number of copies for the shard (number of replicas + 1)
|
277
|
+
# @option arguments [Number] :scroll_size Size on the scroll request powering the delete by query
|
278
|
+
# @option arguments [Boolean] :wait_for_completion Should the request should block until the delete by query is complete.
|
279
|
+
# @option arguments [Number] :requests_per_second The throttle for this request in sub-requests per second. -1 means no throttle.
|
280
|
+
# @option arguments [Number|string] :slices The number of slices this task should be divided into. Defaults to 1, meaning the task isn't sliced into subtasks. Can be set to `auto`.
|
281
|
+
# @option arguments [Hash] :headers Custom HTTP headers
|
282
|
+
# @option arguments [Hash] :body The search definition using the Query DSL (*Required*)
|
283
|
+
#
|
284
|
+
# @see https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html
|
285
|
+
def delete_by_query(index:, **options)
|
286
|
+
throw_error_when_readonly!
|
287
|
+
|
288
|
+
Esse::Events.instrument('elasticsearch.delete_by_query') do |payload|
|
289
|
+
payload[:request] = opts = options.merge(index: index)
|
290
|
+
payload[:response] = coerce_exception { client.delete_by_query(**opts) }
|
291
|
+
end
|
292
|
+
end
|
195
293
|
end
|
196
294
|
|
197
295
|
include InstanceMethods
|
@@ -210,58 +210,6 @@ module Esse
|
|
210
210
|
payload[:response] = coerce_exception { client.reindex(**opts) }
|
211
211
|
end
|
212
212
|
end
|
213
|
-
|
214
|
-
# Performs an update on every document in the index without changing the source,
|
215
|
-
# for example to pick up a mapping change.
|
216
|
-
#
|
217
|
-
# @option arguments [List] :index A comma-separated list of index names to search; use `_all` or empty string to perform the operation on all indices (*Required*)
|
218
|
-
# @option arguments [String] :analyzer The analyzer to use for the query string
|
219
|
-
# @option arguments [Boolean] :analyze_wildcard Specify whether wildcard and prefix queries should be analyzed (default: false)
|
220
|
-
# @option arguments [String] :default_operator The default operator for query string query (AND or OR) (options: AND, OR)
|
221
|
-
# @option arguments [String] :df The field to use as default where no field prefix is given in the query string
|
222
|
-
# @option arguments [Number] :from Starting offset (default: 0)
|
223
|
-
# @option arguments [Boolean] :ignore_unavailable Whether specified concrete indices should be ignored when unavailable (missing or closed)
|
224
|
-
# @option arguments [Boolean] :allow_no_indices Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
|
225
|
-
# @option arguments [String] :conflicts What to do when the update by query hits version conflicts? (options: abort, proceed)
|
226
|
-
# @option arguments [String] :expand_wildcards Whether to expand wildcard expression to concrete indices that are open, closed or both. (options: open, closed, hidden, none, all)
|
227
|
-
# @option arguments [Boolean] :lenient Specify whether format-based query failures (such as providing text to a numeric field) should be ignored
|
228
|
-
# @option arguments [String] :pipeline Ingest pipeline to set on index requests made by this action. (default: none)
|
229
|
-
# @option arguments [String] :preference Specify the node or shard the operation should be performed on (default: random)
|
230
|
-
# @option arguments [String] :q Query in the Lucene query string syntax
|
231
|
-
# @option arguments [List] :routing A comma-separated list of specific routing values
|
232
|
-
# @option arguments [Time] :scroll Specify how long a consistent view of the index should be maintained for scrolled search
|
233
|
-
# @option arguments [String] :search_type Search operation type (options: query_then_fetch, dfs_query_then_fetch)
|
234
|
-
# @option arguments [Time] :search_timeout Explicit timeout for each search request. Defaults to no timeout.
|
235
|
-
# @option arguments [Number] :size Deprecated, please use `max_docs` instead
|
236
|
-
# @option arguments [Number] :max_docs Maximum number of documents to process (default: all documents)
|
237
|
-
# @option arguments [List] :sort A comma-separated list of <field>:<direction> pairs
|
238
|
-
# @option arguments [List] :_source True or false to return the _source field or not, or a list of fields to return
|
239
|
-
# @option arguments [List] :_source_excludes A list of fields to exclude from the returned _source field
|
240
|
-
# @option arguments [List] :_source_includes A list of fields to extract and return from the _source field
|
241
|
-
# @option arguments [Number] :terminate_after The maximum number of documents to collect for each shard, upon reaching which the query execution will terminate early.
|
242
|
-
# @option arguments [List] :stats Specific 'tag' of the request for logging and statistical purposes
|
243
|
-
# @option arguments [Boolean] :version Specify whether to return document version as part of a hit
|
244
|
-
# @option arguments [Boolean] :version_type Should the document increment the version number (internal) on hit or not (reindex)
|
245
|
-
# @option arguments [Boolean] :request_cache Specify if request cache should be used for this request or not, defaults to index level setting
|
246
|
-
# @option arguments [Boolean] :refresh Should the affected indexes be refreshed?
|
247
|
-
# @option arguments [Time] :timeout Time each individual bulk request should wait for shards that are unavailable.
|
248
|
-
# @option arguments [String] :wait_for_active_shards Sets the number of shard copies that must be active before proceeding with the update by query operation. Defaults to 1, meaning the primary shard only. Set to `all` for all shard copies, otherwise set to any non-negative value less than or equal to the total number of copies for the shard (number of replicas + 1)
|
249
|
-
# @option arguments [Number] :scroll_size Size on the scroll request powering the update by query
|
250
|
-
# @option arguments [Boolean] :wait_for_completion Should the request should block until the update by query operation is complete.
|
251
|
-
# @option arguments [Number] :requests_per_second The throttle to set on this request in sub-requests per second. -1 means no throttle.
|
252
|
-
# @option arguments [Number|string] :slices The number of slices this task should be divided into. Defaults to 1, meaning the task isn't sliced into subtasks. Can be set to `auto`.
|
253
|
-
# @option arguments [Hash] :headers Custom HTTP headers
|
254
|
-
# @option arguments [Hash] :body The search definition using the Query DSL
|
255
|
-
#
|
256
|
-
# @see https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html
|
257
|
-
def update_by_query(index:, **options)
|
258
|
-
throw_error_when_readonly!
|
259
|
-
|
260
|
-
Esse::Events.instrument('elasticsearch.update_by_query') do |payload|
|
261
|
-
payload[:request] = opts = options.merge(index: index)
|
262
|
-
payload[:response] = coerce_exception { client.update_by_query(**opts) }
|
263
|
-
end
|
264
|
-
end
|
265
213
|
end
|
266
214
|
|
267
215
|
include InstanceMethods
|
data/lib/esse/transport.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
module Esse
|
4
4
|
class Transport
|
5
5
|
require_relative './transport/aliases'
|
6
|
-
require_relative './transport/
|
6
|
+
require_relative './transport/cluster'
|
7
7
|
require_relative './transport/indices'
|
8
8
|
require_relative './transport/search'
|
9
9
|
require_relative './transport/documents'
|
data/lib/esse/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: esse
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.0.
|
4
|
+
version: 0.4.0.rc3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcos G. Zimmermann
|
8
8
|
autorequire:
|
9
9
|
bindir: exec
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-10-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|
@@ -228,6 +228,7 @@ files:
|
|
228
228
|
- lib/esse/cli/index/update_aliases.rb
|
229
229
|
- lib/esse/cli/index/update_mapping.rb
|
230
230
|
- lib/esse/cli/index/update_settings.rb
|
231
|
+
- lib/esse/cli/parser/bool_or_hash.rb
|
231
232
|
- lib/esse/cli/templates/collection.rb.erb
|
232
233
|
- lib/esse/cli/templates/config.rb.erb
|
233
234
|
- lib/esse/cli/templates/document.rb.erb
|
@@ -296,8 +297,8 @@ files:
|
|
296
297
|
- lib/esse/template_loader.rb
|
297
298
|
- lib/esse/transport.rb
|
298
299
|
- lib/esse/transport/aliases.rb
|
300
|
+
- lib/esse/transport/cluster.rb
|
299
301
|
- lib/esse/transport/documents.rb
|
300
|
-
- lib/esse/transport/health.rb
|
301
302
|
- lib/esse/transport/indices.rb
|
302
303
|
- lib/esse/transport/search.rb
|
303
304
|
- lib/esse/version.rb
|