elastomer-client 3.2.2 → 6.2.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.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/.devcontainer/devcontainer.json +46 -0
  3. data/.devcontainer/postCreateCommand.sh +4 -0
  4. data/.github/dependabot.yaml +11 -0
  5. data/.github/workflows/main.yml +45 -0
  6. data/.github/workflows/rubocop.yml +15 -0
  7. data/.gitignore +1 -1
  8. data/.rubocop.yml +13 -65
  9. data/.ruby-version +1 -0
  10. data/CHANGELOG.md +76 -0
  11. data/Gemfile +18 -1
  12. data/README.md +110 -51
  13. data/Rakefile +3 -1
  14. data/docker/compose.yaml +71 -0
  15. data/docker/elasticsearch8plus.yml +13 -0
  16. data/docs/README.md +4 -5
  17. data/docs/bulk_indexing.md +1 -1
  18. data/docs/client.md +20 -33
  19. data/docs/cluster.md +8 -8
  20. data/docs/docs.md +5 -5
  21. data/docs/index.md +4 -4
  22. data/docs/multi_search.md +1 -1
  23. data/docs/notifications.md +3 -3
  24. data/docs/scan_scroll.md +1 -1
  25. data/docs/snapshots.md +1 -1
  26. data/docs/templates.md +1 -1
  27. data/elastomer-client.gemspec +7 -16
  28. data/lib/{elastomer → elastomer_client}/client/bulk.rb +70 -47
  29. data/lib/{elastomer → elastomer_client}/client/cluster.rb +18 -16
  30. data/lib/{elastomer → elastomer_client}/client/delete_by_query.rb +6 -4
  31. data/lib/{elastomer → elastomer_client}/client/docs.rb +82 -72
  32. data/lib/{elastomer → elastomer_client}/client/errors.rb +7 -17
  33. data/lib/{elastomer → elastomer_client}/client/index.rb +55 -79
  34. data/lib/{elastomer → elastomer_client}/client/multi_percolate.rb +7 -5
  35. data/lib/{elastomer → elastomer_client}/client/multi_search.rb +5 -3
  36. data/lib/{elastomer → elastomer_client}/client/native_delete_by_query.rb +6 -6
  37. data/lib/{elastomer → elastomer_client}/client/nodes.rb +11 -10
  38. data/lib/{elastomer → elastomer_client}/client/percolator.rb +9 -10
  39. data/lib/elastomer_client/client/reindex.rb +29 -0
  40. data/lib/{elastomer → elastomer_client}/client/repository.rb +7 -5
  41. data/lib/{elastomer → elastomer_client}/client/rest_api_spec/api_spec.rb +7 -6
  42. data/lib/{elastomer → elastomer_client}/client/rest_api_spec/api_spec_v5_6.rb +1 -1
  43. data/lib/elastomer_client/client/rest_api_spec/api_spec_v8_13.rb +7567 -0
  44. data/lib/elastomer_client/client/rest_api_spec/api_spec_v8_7.rb +6553 -0
  45. data/lib/{elastomer → elastomer_client}/client/rest_api_spec/rest_api.rb +6 -4
  46. data/lib/{elastomer → elastomer_client}/client/rest_api_spec.rb +3 -2
  47. data/lib/{elastomer → elastomer_client}/client/scroller.rb +17 -16
  48. data/lib/{elastomer → elastomer_client}/client/snapshot.rb +10 -8
  49. data/lib/{elastomer → elastomer_client}/client/tasks.rb +9 -13
  50. data/lib/{elastomer → elastomer_client}/client/template.rb +10 -9
  51. data/lib/elastomer_client/client/update_by_query.rb +50 -0
  52. data/lib/{elastomer → elastomer_client}/client.rb +51 -62
  53. data/lib/{elastomer → elastomer_client}/core_ext/time.rb +2 -0
  54. data/lib/{elastomer → elastomer_client}/middleware/compress.rb +2 -2
  55. data/lib/{elastomer → elastomer_client}/middleware/encode_json.rb +4 -2
  56. data/lib/{elastomer → elastomer_client}/middleware/limit_size.rb +5 -3
  57. data/lib/{elastomer → elastomer_client}/middleware/opaque_id.rb +10 -7
  58. data/lib/{elastomer → elastomer_client}/middleware/parse_json.rb +5 -3
  59. data/lib/{elastomer → elastomer_client}/notifications.rb +17 -15
  60. data/lib/elastomer_client/version.rb +9 -0
  61. data/lib/elastomer_client/version_support.rb +24 -0
  62. data/script/bootstrap +4 -2
  63. data/script/console +3 -1
  64. data/script/generate-rest-api-spec +77 -22
  65. data/test/assertions.rb +32 -39
  66. data/test/client/bulk_test.rb +165 -143
  67. data/test/client/cluster_test.rb +35 -13
  68. data/test/client/docs_test.rb +387 -274
  69. data/test/client/errors_test.rb +38 -40
  70. data/test/client/index_test.rb +243 -202
  71. data/test/client/multi_percolate_test.rb +46 -41
  72. data/test/client/multi_search_test.rb +122 -67
  73. data/test/client/native_delete_by_query_test.rb +96 -88
  74. data/test/client/nodes_test.rb +21 -10
  75. data/test/client/percolator_test.rb +19 -14
  76. data/test/client/reindex_test.rb +76 -0
  77. data/test/client/repository_test.rb +31 -19
  78. data/test/client/rest_api_spec/api_spec_test.rb +13 -11
  79. data/test/client/rest_api_spec/rest_api_test.rb +9 -7
  80. data/test/client/scroller_test.rb +44 -70
  81. data/test/client/snapshot_test.rb +38 -21
  82. data/test/client/stubbed_client_test.rb +7 -4
  83. data/test/client/tasks_test.rb +12 -17
  84. data/test/client/template_test.rb +34 -13
  85. data/test/client/update_by_query_test.rb +137 -0
  86. data/test/client_test.rb +158 -92
  87. data/test/core_ext/time_test.rb +14 -12
  88. data/test/middleware/encode_json_test.rb +18 -7
  89. data/test/middleware/opaque_id_test.rb +18 -14
  90. data/test/middleware/parse_json_test.rb +17 -9
  91. data/test/mock_response.rb +30 -0
  92. data/test/notifications_test.rb +15 -8
  93. data/test/test_helper.rb +40 -97
  94. data/test/version_support_test.rb +13 -78
  95. metadata +60 -208
  96. data/.overcommit.yml +0 -5
  97. data/.travis.yml +0 -34
  98. data/docker/docker-compose.cibuild.yml +0 -8
  99. data/docker/docker-compose.es24.yml +0 -34
  100. data/docker/docker-compose.es56.yml +0 -37
  101. data/docs/warmers.md +0 -3
  102. data/lib/elastomer/client/app_delete_by_query.rb +0 -144
  103. data/lib/elastomer/client/rest_api_spec/api_spec_v2_3.rb +0 -2232
  104. data/lib/elastomer/client/rest_api_spec/api_spec_v2_4.rb +0 -2250
  105. data/lib/elastomer/client/warmer.rb +0 -98
  106. data/lib/elastomer/version.rb +0 -7
  107. data/lib/elastomer/version_support.rb +0 -182
  108. data/script/cibuild +0 -103
  109. data/script/cibuild-elastomer-client +0 -1
  110. data/script/cibuild-elastomer-client-es24 +0 -8
  111. data/script/cibuild-elastomer-client-es56 +0 -8
  112. data/test/client/app_delete_by_query_test.rb +0 -192
  113. data/test/client/es_5_x_warmer_test.rb +0 -13
  114. data/test/client/warmer_test.rb +0 -60
@@ -1,4 +1,6 @@
1
- module Elastomer
1
+ # frozen_string_literal: true
2
+
3
+ module ElastomerClient
2
4
  class Client
3
5
 
4
6
  # Provides access to index-level API commands. An index name is required for
@@ -11,7 +13,7 @@ module Elastomer
11
13
  # name - The name of the index as a String or an Array of names
12
14
  #
13
15
  # Returns an Index instance.
14
- def index( name = nil )
16
+ def index(name = nil)
15
17
  Index.new self, name
16
18
  end
17
19
 
@@ -19,10 +21,10 @@ module Elastomer
19
21
  # Create a new index client for making API requests that pertain to
20
22
  # the health and management of individual indexes.
21
23
  #
22
- # client - Elastomer::Client used for HTTP requests to the server
24
+ # client - ElastomerClient::Client used for HTTP requests to the server
23
25
  # name - The name of the index as a String or an Array of names
24
26
  #
25
- def initialize( client, name )
27
+ def initialize(client, name)
26
28
  @client = client
27
29
  @name = @client.assert_param_presence(name, "index name") unless name.nil?
28
30
  end
@@ -39,7 +41,7 @@ module Elastomer
39
41
  # and https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-types-exists.html
40
42
  #
41
43
  # Returns true if the index (or type) exists
42
- def exists?( params = {} )
44
+ def exists?(params = {})
43
45
  response = client.head "/{index}{/type}", update_params(params, action: "index.exists", rest_api: "indices.exists")
44
46
  response.success?
45
47
  end
@@ -53,8 +55,8 @@ module Elastomer
53
55
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html
54
56
  #
55
57
  # Returns the response body as a Hash
56
- def create( body, params = {} )
57
- response = client.put "/{index}", update_params(params, body: body, action: "index.create", rest_api: "indices.create")
58
+ def create(body, params = {})
59
+ response = client.put "/{index}", update_params(params, body:, action: "index.create", rest_api: "indices.create")
58
60
  response.body
59
61
  end
60
62
 
@@ -65,7 +67,7 @@ module Elastomer
65
67
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-delete-index.html
66
68
  #
67
69
  # Returns the response body as a Hash
68
- def delete( params = {} )
70
+ def delete(params = {})
69
71
  response = client.delete "/{index}", update_params(params, action: "index.delete", rest_api: "indices.delete")
70
72
  response.body
71
73
  end
@@ -77,7 +79,7 @@ module Elastomer
77
79
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-open-close.html
78
80
  #
79
81
  # Returns the response body as a Hash
80
- def open( params = {} )
82
+ def open(params = {})
81
83
  response = client.post "/{index}/_open", update_params(params, action: "index.open", rest_api: "indices.open")
82
84
  response.body
83
85
  end
@@ -89,7 +91,7 @@ module Elastomer
89
91
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-open-close.html
90
92
  #
91
93
  # Returns the response body as a Hash
92
- def close( params = {} )
94
+ def close(params = {})
93
95
  response = client.post "/{index}/_close", update_params(params, action: "index.close", rest_api: "indices.close")
94
96
  response.body
95
97
  end
@@ -101,7 +103,7 @@ module Elastomer
101
103
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-get-settings.html
102
104
  #
103
105
  # Returns the response body as a Hash
104
- def get_settings( params = {} )
106
+ def get_settings(params = {})
105
107
  response = client.get "{/index}/_settings", update_params(params, action: "index.get_settings", rest_api: "indices.get_settings")
106
108
  response.body
107
109
  end
@@ -115,8 +117,8 @@ module Elastomer
115
117
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-update-settings.html
116
118
  #
117
119
  # Returns the response body as a Hash
118
- def update_settings( body, params = {} )
119
- response = client.put "{/index}/_settings", update_params(params, body: body, action: "index.update_settings", rest_api: "indices.put_settings")
120
+ def update_settings(body, params = {})
121
+ response = client.put "{/index}/_settings", update_params(params, body:, action: "index.update_settings", rest_api: "indices.put_settings")
120
122
  response.body
121
123
  end
122
124
 
@@ -129,7 +131,7 @@ module Elastomer
129
131
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-get-mapping.html
130
132
  #
131
133
  # Returns the response body as a Hash
132
- def get_mapping( params = {} )
134
+ def get_mapping(params = {})
133
135
  response = client.get "/{index}/_mapping{/type}", update_params(params, action: "index.get_mapping", rest_api: "indices.get_mapping")
134
136
  response.body
135
137
  end
@@ -144,8 +146,8 @@ module Elastomer
144
146
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html
145
147
  #
146
148
  # Returns the response body as a Hash
147
- def update_mapping( type, body, params = {} )
148
- response = client.put "/{index}/_mapping/{type}", update_params(params, body: body, type: type, action: "index.update_mapping", rest_api: "indices.put_mapping")
149
+ def update_mapping(type, body, params = {})
150
+ response = client.put "/{index}/_mapping{/type}", update_params(params, body:, type:, action: "index.update_mapping", rest_api: "indices.put_mapping")
149
151
  response.body
150
152
  end
151
153
  alias_method :put_mapping, :update_mapping
@@ -157,7 +159,7 @@ module Elastomer
157
159
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html
158
160
  #
159
161
  # Returns the response body as a Hash
160
- def get_aliases( params = {} )
162
+ def get_aliases(params = {})
161
163
  response = client.get "/{index}/_alias", update_params(action: "index.get_aliases", rest_api: "indices.get_alias")
162
164
  response.body
163
165
  end
@@ -178,8 +180,8 @@ module Elastomer
178
180
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html
179
181
  #
180
182
  # Returns the response body as a Hash
181
- def get_alias( name, params = {} )
182
- response = client.get "/{index}/_alias/{name}", update_params(params, name: name, action: "index.get_alias", rest_api: "indices.get_alias")
183
+ def get_alias(name, params = {})
184
+ response = client.get "/{index}/_alias/{name}", update_params(params, name:, action: "index.get_alias", rest_api: "indices.get_alias")
183
185
  response.body
184
186
  end
185
187
 
@@ -197,8 +199,8 @@ module Elastomer
197
199
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html
198
200
  #
199
201
  # Returns the response body as a Hash
200
- def add_alias( name, params = {} )
201
- response = client.put "/{index}/_alias/{name}", update_params(params, name: name, action: "index.add_alias", rest_api: "indices.put_alias")
202
+ def add_alias(name, params = {})
203
+ response = client.put "/{index}/_alias/{name}", update_params(params, name:, action: "index.add_alias", rest_api: "indices.put_alias")
202
204
  response.body
203
205
  end
204
206
 
@@ -215,8 +217,8 @@ module Elastomer
215
217
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html
216
218
  #
217
219
  # Returns the response body as a Hash
218
- def delete_alias( name, params = {} )
219
- response = client.delete "/{index}/_alias/{name}", update_params(params, name: name, action: "index.delete_alias", rest_api: "indices.delete_alias")
220
+ def delete_alias(name, params = {})
221
+ response = client.delete "/{index}/_alias/{name}", update_params(params, name:, action: "index.delete_alias", rest_api: "indices.delete_alias")
220
222
  response.body
221
223
  end
222
224
 
@@ -229,9 +231,9 @@ module Elastomer
229
231
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-analyze.html
230
232
  #
231
233
  # Returns the response body as a Hash
232
- def analyze( text, params = {} )
234
+ def analyze(text, params = {})
233
235
  body = text.is_a?(Hash) ? text : {text: text.to_s}
234
- response = client.get "{/index}/_analyze", update_params(params, body: body, action: "index.analyze", rest_api: "indices.analyze")
236
+ response = client.get "{/index}/_analyze", update_params(params, body:, action: "index.analyze", rest_api: "indices.analyze")
235
237
  response.body
236
238
  end
237
239
 
@@ -244,7 +246,7 @@ module Elastomer
244
246
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-refresh.html
245
247
  #
246
248
  # Returns the response body as a Hash
247
- def refresh( params = {} )
249
+ def refresh(params = {})
248
250
  response = client.post "{/index}/_refresh", update_params(params, action: "index.refresh", rest_api: "indices.refresh")
249
251
  response.body
250
252
  end
@@ -257,7 +259,7 @@ module Elastomer
257
259
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-flush.html
258
260
  #
259
261
  # Returns the response body as a Hash
260
- def flush( params = {} )
262
+ def flush(params = {})
261
263
  response = client.post "{/index}/_flush", update_params(params, action: "index.flush", rest_api: "indices.flush")
262
264
  response.body
263
265
  end
@@ -271,7 +273,7 @@ module Elastomer
271
273
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-forcemerge.html
272
274
  #
273
275
  # Returns the response body as a Hash
274
- def forcemerge( params = {} )
276
+ def forcemerge(params = {})
275
277
  response = client.post "{/index}/_forcemerge", update_params(params, action: "index.forcemerge", rest_api: "indices.forcemerge")
276
278
  response.body
277
279
  end
@@ -286,7 +288,7 @@ module Elastomer
286
288
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-recovery.html
287
289
  #
288
290
  # Returns the response body as a Hash
289
- def recovery( params = {} )
291
+ def recovery(params = {})
290
292
  response = client.get "{/index}/_recovery", update_params(params, action: "index.recovery", rest_api: "indices.recovery")
291
293
  response.body
292
294
  end
@@ -300,7 +302,7 @@ module Elastomer
300
302
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-clearcache.html
301
303
  #
302
304
  # Returns the response body as a Hash
303
- def clear_cache( params = {} )
305
+ def clear_cache(params = {})
304
306
  response = client.post "{/index}/_cache/clear", update_params(params, action: "index.clear_cache", rest_api: "indices.clear_cache")
305
307
  response.body
306
308
  end
@@ -319,7 +321,7 @@ module Elastomer
319
321
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-stats.html
320
322
  #
321
323
  # Returns the response body as a Hash
322
- def stats( params = {} )
324
+ def stats(params = {})
323
325
  response = client.get "{/index}/_stats{/stats}", update_params(params, action: "index.stats", rest_api: "indices.stats")
324
326
  response.body
325
327
  end
@@ -332,7 +334,7 @@ module Elastomer
332
334
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-segments.html
333
335
  #
334
336
  # Returns the response body as a Hash
335
- def segments( params = {} )
337
+ def segments(params = {})
336
338
  response = client.get "{/index}/_segments", update_params(params, action: "index.segments", rest_api: "indices.segments")
337
339
  response.body
338
340
  end
@@ -345,7 +347,8 @@ module Elastomer
345
347
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/docs.html
346
348
  #
347
349
  # Returns a Docs instance.
348
- def docs( type = nil )
350
+ def docs(type = nil)
351
+ type = "_doc" if client.version_support.es_version_8_plus?
349
352
  client.docs name, type
350
353
  end
351
354
 
@@ -384,7 +387,7 @@ module Elastomer
384
387
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html
385
388
  #
386
389
  # Returns the response body as a Hash
387
- def bulk( params = {}, &block )
390
+ def bulk(params = {}, &block)
388
391
  raise "a block is required" if block.nil?
389
392
 
390
393
  params = {index: self.name}.merge params
@@ -412,7 +415,7 @@ module Elastomer
412
415
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html
413
416
  #
414
417
  # Returns a new Scroller instance
415
- def scroll( query, opts = {} )
418
+ def scroll(query, opts = {})
416
419
  opts = {index: name}.merge opts
417
420
  client.scroll query, opts
418
421
  end
@@ -441,7 +444,7 @@ module Elastomer
441
444
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html
442
445
  #
443
446
  # Returns a new Scroller instance
444
- def scan( query, opts = {} )
447
+ def scan(query, opts = {})
445
448
  opts = {index: name}.merge opts
446
449
  client.scan query, opts
447
450
  end
@@ -472,7 +475,7 @@ module Elastomer
472
475
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html
473
476
  #
474
477
  # Returns the response body as a Hash
475
- def multi_search( params = {}, &block )
478
+ def multi_search(params = {}, &block)
476
479
  raise "a block is required" if block.nil?
477
480
 
478
481
  params = {index: self.name}.merge params
@@ -504,47 +507,9 @@ module Elastomer
504
507
  client.multi_percolate(params, &block)
505
508
  end
506
509
 
507
- # Provides access to warmer API commands. Index warmers run search
508
- # requests to warm up the index before it is available for
509
- # searching. Warmers are useful for searches that require heavy
510
- # data loading, such as faceting or sorting.
511
- #
512
- # The warmer api allows creating, deleting, and retrieving
513
- # registered warmers.
514
- #
515
- # warmer_name - The name of the warmer to operate on.
516
- #
517
- # Examples
518
- # index.warmer('warmer1').create(query: {match_all: {}})
519
- # index.warmer('warmer1').get
520
- # index.warmer('warmer1').delete
521
- #
522
- # See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-warmers.html
523
- #
524
- # Returns a new Warmer instance
525
- def warmer(warmer_name)
526
- Warmer.new(client, name, warmer_name)
527
- end
528
-
529
- # Delete documents by query following either the native or
530
- # application-level delete by query method.
531
- #
532
- # NOTE: The parameters and response format varies by version. To have more
533
- # control over this, use app_delete_by_query or native_delete_by_query
534
- # directly.
510
+ # Delete documents by query
535
511
  def delete_by_query(query, params = nil)
536
- docs.send(client.version_support.delete_by_query_method, query, params)
537
- end
538
-
539
- # DEPRECATED: Delete documents from one or more indices and one or more types based
540
- # on a query using application-level logic.
541
- #
542
- # See Client#app_delete_by_query for more information.
543
- #
544
- # Returns a Hash of statistics about the delete operations simulating the
545
- # Elasticsearch 2.x delete by query plugin's output.
546
- def app_delete_by_query(query, params = nil)
547
- docs.app_delete_by_query(query, params)
512
+ docs.send(:native_delete_by_query, query, params)
548
513
  end
549
514
 
550
515
  # Delete documents from one or more indices and one or more types based
@@ -555,12 +520,22 @@ module Elastomer
555
520
  # Returns a Hash of statistics about the delete operations as returned by
556
521
  # _delete_by_query.
557
522
  #
558
- # Raises Elastomer::Client::IncompatibleVersionException if this version
523
+ # Raises ElastomerClient::Client::IncompatibleVersionException if this version
559
524
  # of Elasticsearch does not support _delete_by_query.
560
525
  def native_delete_by_query(query, params = nil)
561
526
  docs.native_delete_by_query(query, params)
562
527
  end
563
528
 
529
+ # Update documents by query using Elasticsearch's _update_by_query API.
530
+ #
531
+ # See Client#update_by_query for more information.
532
+ #
533
+ # Returns a Hash of statistics about the update operations as returned by
534
+ # _update_by_query.
535
+ def update_by_query(query, params = nil)
536
+ docs.update_by_query(query, params)
537
+ end
538
+
564
539
  # Constructs a Percolator with the given id on this index.
565
540
  #
566
541
  # Examples
@@ -579,9 +554,10 @@ module Elastomer
579
554
  # overrides - Optional parameter overrides as a Hash
580
555
  #
581
556
  # Returns a new params Hash.
582
- def update_params( params, overrides = nil )
557
+ def update_params(params, overrides = nil)
583
558
  h = defaults.update params
584
559
  h.update overrides unless overrides.nil?
560
+ h.delete(:type) if client.version_support.es_version_8_plus?
585
561
  h
586
562
  end
587
563
 
@@ -1,4 +1,6 @@
1
- module Elastomer
1
+ # frozen_string_literal: true
2
+
3
+ module ElastomerClient
2
4
  class Client
3
5
 
4
6
  # Execute an array of percolate actions in bulk. Results are returned in an
@@ -40,7 +42,7 @@ module Elastomer
40
42
  raise "multi_percolate request body cannot be nil" if body.nil?
41
43
  params ||= {}
42
44
 
43
- response = self.post "{/index}{/type}/_mpercolate", params.merge(body: body, action: "mpercolate", rest_api: "mpercolate")
45
+ response = self.post "{/index}{/type}/_mpercolate", params.merge(body:, action: "mpercolate", rest_api: "mpercolate")
44
46
  response.body
45
47
  end
46
48
  end
@@ -61,7 +63,7 @@ module Elastomer
61
63
  # Create a new MultiPercolate instance for accumulating percolate actions
62
64
  # and submitting them all as a single request.
63
65
  #
64
- # client - Elastomer::Client used for HTTP requests to the server
66
+ # client - ElastomerClient::Client used for HTTP requests to the server
65
67
  # params - Parameters Hash to pass to the Client#multi_percolate method
66
68
  def initialize(client, params = {})
67
69
  @client = client
@@ -81,7 +83,7 @@ module Elastomer
81
83
  # Returns this MultiPercolate instance.
82
84
  def percolate(doc, header = {})
83
85
  add_to_actions(percolate: @params.merge(header))
84
- add_to_actions(doc: doc)
86
+ add_to_actions(doc:)
85
87
  end
86
88
 
87
89
  # Add a percolate acount action to the multi percolate request. This
@@ -94,7 +96,7 @@ module Elastomer
94
96
  # Returns this MultiPercolate instance.
95
97
  def count(doc, header = {})
96
98
  add_to_actions(count: @params.merge(header))
97
- add_to_actions(doc: doc)
99
+ add_to_actions(doc:)
98
100
  end
99
101
 
100
102
  # Execute the multi_percolate call with the accumulated percolate actions.
@@ -1,4 +1,6 @@
1
- module Elastomer
1
+ # frozen_string_literal: true
2
+
3
+ module ElastomerClient
2
4
  class Client
3
5
 
4
6
  # Execute an array of searches in bulk. Results are returned in an
@@ -40,7 +42,7 @@ module Elastomer
40
42
  raise "multi_search request body cannot be nil" if body.nil?
41
43
  params ||= {}
42
44
 
43
- response = self.post "{/index}{/type}/_msearch", params.merge(body: body, action: "msearch", rest_api: "msearch")
45
+ response = self.post "{/index}{/type}/_msearch", params.merge(body:, action: "msearch", rest_api: "msearch")
44
46
  response.body
45
47
  end
46
48
  end
@@ -61,7 +63,7 @@ module Elastomer
61
63
  # Create a new MultiSearch instance for accumulating searches and
62
64
  # submitting them all as a single request.
63
65
  #
64
- # client - Elastomer::Client used for HTTP requests to the server
66
+ # client - ElastomerClient::Client used for HTTP requests to the server
65
67
  # params - Parameters Hash to pass to the Client#multi_search method
66
68
  def initialize(client, params = {})
67
69
  @client = client
@@ -1,4 +1,6 @@
1
- module Elastomer
1
+ # frozen_string_literal: true
2
+
3
+ module ElastomerClient
2
4
  class Client
3
5
  # Delete documents based on a query using the Elasticsearch _delete_by_query API.
4
6
  #
@@ -21,10 +23,6 @@ module Elastomer
21
23
  attr_reader :client, :query, :parameters
22
24
 
23
25
  def initialize(client, query, parameters)
24
- unless client.version_support.native_delete_by_query?
25
- raise IncompatibleVersionException, "Elasticsearch '#{client.version}' does not support _delete_by_query"
26
- end
27
-
28
26
  @client = client
29
27
  @query = query
30
28
  @parameters = parameters
@@ -32,7 +30,9 @@ module Elastomer
32
30
 
33
31
  def execute
34
32
  # TODO: Require index parameter. type is optional.
35
- response = client.post("/{index}{/type}/_delete_by_query", parameters.merge(body: query, action: "delete_by_query", rest_api: "delete_by_query"))
33
+ updated_params = parameters.merge(body: query, action: "delete_by_query", rest_api: "delete_by_query")
34
+ updated_params.delete(:type) if client.version_support.es_version_8_plus?
35
+ response = client.post("/{index}{/type}/_delete_by_query", updated_params)
36
36
  response.body
37
37
  end
38
38
  end
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
1
2
 
2
- module Elastomer
3
+ module ElastomerClient
3
4
  class Client
4
5
 
5
6
  # Provides access to node-level API commands. The default node is set to
@@ -10,7 +11,7 @@ module Elastomer
10
11
  # node_id - The node ID as a String or an Array of node IDs
11
12
  #
12
13
  # Returns a Nodes instance.
13
- def nodes( node_id = nil )
14
+ def nodes(node_id = nil)
14
15
  Nodes.new self, node_id
15
16
  end
16
17
 
@@ -19,10 +20,10 @@ module Elastomer
19
20
  # Create a new nodes client for making API requests that pertain to
20
21
  # the health and management individual nodes.
21
22
  #
22
- # client - Elastomer::Client used for HTTP requests to the server
23
+ # client - ElastomerClient::Client used for HTTP requests to the server
23
24
  # node_id - The node ID as a String or an Array of node IDs
24
25
  #
25
- def initialize( client, node_id )
26
+ def initialize(client, node_id)
26
27
  @client = client
27
28
  @node_id = node_id
28
29
  end
@@ -30,7 +31,7 @@ module Elastomer
30
31
  attr_reader :client, :node_id
31
32
 
32
33
  # Retrieve one or more (or all) of the cluster nodes information. By
33
- # default all information is returned from all ndoes. You can select the
34
+ # default all information is returned from all nodes. You can select the
34
35
  # information to be returned by passing in the `:info` from the list of
35
36
  # "settings", "os", "process", "jvm", "thread_pool", "network",
36
37
  # "transport", "http" and "plugins".
@@ -48,7 +49,7 @@ module Elastomer
48
49
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-nodes-info.html
49
50
  #
50
51
  # Returns the response as a Hash
51
- def info( params = {} )
52
+ def info(params = {})
52
53
  response = client.get "/_nodes{/node_id}{/info}", update_params(params, action: "nodes.info", rest_api: "nodes.info")
53
54
  response.body
54
55
  end
@@ -68,7 +69,7 @@ module Elastomer
68
69
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-nodes-stats.html
69
70
  #
70
71
  # Returns the response as a Hash
71
- def stats( params = {} )
72
+ def stats(params = {})
72
73
  response = client.get "/_nodes{/node_id}/stats{/stats}", update_params(params, action: "nodes.stats", rest_api: "nodes.stats")
73
74
  response.body
74
75
  end
@@ -86,7 +87,7 @@ module Elastomer
86
87
  # See https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-nodes-hot-threads.html
87
88
  #
88
89
  # Returns the response as a String
89
- def hot_threads( params = {} )
90
+ def hot_threads(params = {})
90
91
  response = client.get "/_nodes{/node_id}/hot_threads", update_params(params, action: "nodes.hot_threads", rest_api: "nodes.hot_threads")
91
92
  response.body
92
93
  end
@@ -98,8 +99,8 @@ module Elastomer
98
99
  # overrides - Optional parameter overrides as a Hash
99
100
  #
100
101
  # Returns a new params Hash.
101
- def update_params( params, overrides = nil )
102
- h = { :node_id => node_id }.update params
102
+ def update_params(params, overrides = nil)
103
+ h = { node_id: }.update params
103
104
  h.update overrides unless overrides.nil?
104
105
  h
105
106
  end
@@ -1,20 +1,19 @@
1
- module Elastomer
1
+ # frozen_string_literal: true
2
+
3
+ module ElastomerClient
2
4
  class Client
3
5
 
4
6
  class Percolator
5
7
 
6
8
  # Create a new Percolator for managing a query.
7
9
  #
8
- # client - Elastomer::Client used for HTTP requests to the server
10
+ # client - ElastomerClient::Client used for HTTP requests to the server
9
11
  # index_name - The index name
10
12
  # id - The _id for the query
11
13
  def initialize(client, index_name, id)
12
14
  @client = client
13
15
  @index_name = client.assert_param_presence(index_name, "index name")
14
16
  @id = client.assert_param_presence(id, "id")
15
-
16
- # COMPATIBILITY
17
- @percolator_type = client.version_support.percolator_type
18
17
  end
19
18
 
20
19
  attr_reader :client, :index_name, :id
@@ -28,7 +27,7 @@ module Elastomer
28
27
  #
29
28
  # Returns the response body as a Hash
30
29
  def create(body, params = {})
31
- response = client.put("/{index}/#{@percolator_type}/{id}", defaults.merge(params.merge(body: body, action: "percolator.create")))
30
+ response = client.put("/{index}/percolator/{id}", defaults.merge(params.merge(body:, action: "percolator.create")))
32
31
  response.body
33
32
  end
34
33
 
@@ -41,7 +40,7 @@ module Elastomer
41
40
  #
42
41
  # Returns the response body as a Hash
43
42
  def get(params = {})
44
- response = client.get("/{index}/#{@percolator_type}/{id}", defaults.merge(params.merge(action: "percolator.get")))
43
+ response = client.get("/{index}/percolator/{id}", defaults.merge(params.merge(action: "percolator.get")))
45
44
  response.body
46
45
  end
47
46
 
@@ -54,7 +53,7 @@ module Elastomer
54
53
  #
55
54
  # Returns the response body as a Hash
56
55
  def delete(params = {})
57
- response = client.delete("/{index}/#{@percolator_type}/{id}", defaults.merge(params.merge(action: "percolator.delete")))
56
+ response = client.delete("/{index}/percolator/{id}", defaults.merge(params.merge(action: "percolator.delete")))
58
57
  response.body
59
58
  end
60
59
 
@@ -72,9 +71,9 @@ module Elastomer
72
71
 
73
72
  # Internal: Returns a Hash containing default parameters.
74
73
  def defaults
75
- {index: index_name, id: id}
74
+ {index: index_name, id:}
76
75
  end
77
76
 
78
77
  end # Percolator
79
78
  end # Client
80
- end # Elastomer
79
+ end # ElastomerClient
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ElastomerClient
4
+ class Client
5
+
6
+ # Returns a Reindex instance
7
+ def reindex
8
+ Reindex.new(self)
9
+ end
10
+
11
+ class Reindex
12
+ # Create a new Reindex for initiating reindex tasks.
13
+ # More context: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html
14
+ #
15
+ # client - ElastomerClient::Client used for HTTP requests to the server
16
+ def initialize(client)
17
+ @client = client
18
+ end
19
+
20
+ attr_reader :client
21
+
22
+ def reindex(body, params = {})
23
+ response = client.post "/_reindex", params.merge(params, body:, action: "reindex", rest_api: "reindex")
24
+ response.body
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -1,4 +1,6 @@
1
- module Elastomer
1
+ # frozen_string_literal: true
2
+
3
+ module ElastomerClient
2
4
  class Client
3
5
 
4
6
  # Returns a Repository instance.
@@ -10,7 +12,7 @@ module Elastomer
10
12
  # Create a new index client for making API requests that pertain to
11
13
  # the health and management individual indexes.
12
14
  #
13
- # client - Elastomer::Client used for HTTP requests to the server
15
+ # client - ElastomerClient::Client used for HTTP requests to the server
14
16
  # name - The name of the index as a String or an Array of names
15
17
  def initialize(client, name = nil)
16
18
  @client = client
@@ -28,7 +30,7 @@ module Elastomer
28
30
  def exists?(params = {})
29
31
  response = client.get "/_snapshot{/repository}", update_params(params, action: "repository.exists", rest_api: "snapshot.get_repository")
30
32
  response.success?
31
- rescue Elastomer::Client::Error => err
33
+ rescue ElastomerClient::Client::Error => err
32
34
  if err.error && err.error.dig("root_cause", 0, "type") == "repository_missing_exception"
33
35
  false
34
36
  else
@@ -45,7 +47,7 @@ module Elastomer
45
47
  #
46
48
  # Returns the response body as a Hash
47
49
  def create(body, params = {})
48
- response = client.put "/_snapshot/{repository}", update_params(params, body: body, action: "repository.create", rest_api: "snapshot.create_repository")
50
+ response = client.put "/_snapshot/{repository}", update_params(params, body:, action: "repository.create", rest_api: "snapshot.create_repository")
49
51
  response.body
50
52
  end
51
53
 
@@ -79,7 +81,7 @@ module Elastomer
79
81
  #
80
82
  # Returns the response body as a Hash
81
83
  def update(body, params = {})
82
- response = client.put "/_snapshot/{repository}", update_params(params, body: body, action: "repository.update", rest_api: "snapshot.create_repository")
84
+ response = client.put "/_snapshot/{repository}", update_params(params, body:, action: "repository.update", rest_api: "snapshot.create_repository")
83
85
  response.body
84
86
  end
85
87