esse 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/lib/esse/cli/event_listener.rb +4 -5
  3. data/lib/esse/cli/generate.rb +14 -16
  4. data/lib/esse/cli/index/close.rb +1 -1
  5. data/lib/esse/cli/index/create.rb +1 -1
  6. data/lib/esse/cli/index/delete.rb +1 -1
  7. data/lib/esse/cli/index/import.rb +2 -2
  8. data/lib/esse/cli/index/open.rb +1 -1
  9. data/lib/esse/cli/index/reset.rb +1 -1
  10. data/lib/esse/cli/index/update_aliases.rb +2 -2
  11. data/lib/esse/cli/index/update_mapping.rb +8 -3
  12. data/lib/esse/cli/index/update_settings.rb +1 -1
  13. data/lib/esse/cli/index.rb +9 -4
  14. data/lib/esse/cli/templates/collection.rb.erb +6 -6
  15. data/lib/esse/cli/templates/{serializer.rb.erb → document.rb.erb} +6 -6
  16. data/lib/esse/cli/templates/index.rb.erb +39 -34
  17. data/lib/esse/cli.rb +5 -0
  18. data/lib/esse/cluster.rb +38 -12
  19. data/lib/esse/core.rb +7 -3
  20. data/lib/esse/deprecations/cluster.rb +5 -5
  21. data/lib/esse/deprecations/deprecate.rb +29 -0
  22. data/lib/esse/deprecations/index.rb +21 -3
  23. data/lib/esse/deprecations/index_backend_delegator.rb +217 -0
  24. data/lib/esse/deprecations/repository.rb +19 -4
  25. data/lib/esse/deprecations/repository_backend_delegator.rb +110 -0
  26. data/lib/esse/deprecations/serializer.rb +14 -0
  27. data/lib/esse/deprecations.rb +4 -0
  28. data/lib/esse/{serializer.rb → document.rb} +17 -2
  29. data/lib/esse/dynamic_template.rb +4 -0
  30. data/lib/esse/errors.rb +8 -1
  31. data/lib/esse/events.rb +13 -5
  32. data/lib/esse/hash_document.rb +1 -1
  33. data/lib/esse/import/bulk.rb +21 -11
  34. data/lib/esse/index/aliases.rb +50 -0
  35. data/lib/esse/index/attributes.rb +14 -5
  36. data/lib/esse/index/base.rb +17 -53
  37. data/lib/esse/index/documents.rb +236 -0
  38. data/lib/esse/index/indices.rb +171 -0
  39. data/lib/esse/index/object_document_mapper.rb +0 -59
  40. data/lib/esse/index/type.rb +2 -3
  41. data/lib/esse/index.rb +4 -3
  42. data/lib/esse/null_document.rb +1 -1
  43. data/lib/esse/repository/{backend.rb → documents.rb} +2 -3
  44. data/lib/esse/repository/object_document_mapper.rb +20 -20
  45. data/lib/esse/repository.rb +1 -2
  46. data/lib/esse/search/query.rb +8 -8
  47. data/lib/esse/template_loader.rb +1 -1
  48. data/lib/esse/transport/aliases.rb +36 -0
  49. data/lib/esse/transport/documents.rb +199 -0
  50. data/lib/esse/transport/health.rb +30 -0
  51. data/lib/esse/transport/indices.rb +192 -0
  52. data/lib/esse/{client_proxy → transport}/search.rb +9 -5
  53. data/lib/esse/transport.rb +44 -0
  54. data/lib/esse/version.rb +1 -1
  55. metadata +28 -28
  56. data/lib/esse/backend/index/aliases.rb +0 -73
  57. data/lib/esse/backend/index/close.rb +0 -54
  58. data/lib/esse/backend/index/create.rb +0 -67
  59. data/lib/esse/backend/index/delete.rb +0 -39
  60. data/lib/esse/backend/index/documents.rb +0 -270
  61. data/lib/esse/backend/index/existance.rb +0 -22
  62. data/lib/esse/backend/index/open.rb +0 -54
  63. data/lib/esse/backend/index/refresh.rb +0 -45
  64. data/lib/esse/backend/index/reset.rb +0 -33
  65. data/lib/esse/backend/index/update.rb +0 -143
  66. data/lib/esse/backend/index.rb +0 -56
  67. data/lib/esse/backend/repository_backend.rb +0 -105
  68. data/lib/esse/client_proxy.rb +0 -32
  69. data/lib/esse/index/backend.rb +0 -14
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Esse
4
- class ClientProxy
4
+ class Transport
5
5
  module InstanceMethods
6
6
  # Returns results matching a query.
7
+ # @param [Hash] options
8
+ # @option [String] :index The comma-separated list of index names to search; use `_all` to perform the operation on all indices
7
9
  def search(index:, **options)
8
10
  definition = options.merge(
9
11
  index: index,
@@ -17,9 +19,10 @@ module Esse
17
19
 
18
20
  # Allows to retrieve a large numbers of results from a single search request.
19
21
  #
20
- # @param [Time] :scroll Specify how long a consistent view of the index should be maintained for scrolled search
21
- # @param [Boolean] :rest_total_hits_as_int Indicates whether hits.total should be rendered as an integer or an object in the rest search response
22
- # @param [Hash] :body The scroll ID
22
+ # @param [Hash] options
23
+ # @option [Time] :scroll Specify how long a consistent view of the index should be maintained for scrolled search
24
+ # @option [Boolean] :rest_total_hits_as_int Indicates whether hits.total should be rendered as an integer or an object in the rest search response
25
+ # @option [Hash] :body The scroll ID
23
26
  def scroll(scroll:, **definition)
24
27
  unless definition[:body]
25
28
  raise ArgumentError, 'scroll search must have a :body with the :scroll_id'
@@ -32,7 +35,8 @@ module Esse
32
35
 
33
36
  # Explicitly clears the search context for a scroll.
34
37
  #
35
- # @param [Hash] :body Body with the "scroll_id" (string or array of strings) Scroll IDs to clear.
38
+ # @param [Hash] options
39
+ # @option [Hash] :body Body with the "scroll_id" (string or array of strings) Scroll IDs to clear.
36
40
  # To clear all scroll IDs, use _all.
37
41
  def clear_scroll(body:, **options)
38
42
  coerce_exception { client.clear_scroll(body: body, **options) }
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Esse
4
+ class Transport
5
+ require_relative './transport/aliases'
6
+ require_relative './transport/health'
7
+ require_relative './transport/indices'
8
+ require_relative './transport/search'
9
+ require_relative './transport/documents'
10
+
11
+ extend Forwardable
12
+
13
+ def_delegators :@cluster, :client, :throw_error_when_readonly!
14
+
15
+ attr_reader :cluster
16
+
17
+ def initialize(cluster)
18
+ @cluster = cluster
19
+ end
20
+
21
+ # Elasticsearch::Transport was renamed to Elastic::Transport in 8.0
22
+ # This lib should support both versions that's why we are wrapping up the transport
23
+ # errors to local errors.
24
+ #
25
+ # We are not only coercing exceptions but also the response body. Elasticsearch-ruby >= 8.0 returns
26
+ # the response wrapped in a Elasticsearch::API::Response::Response object. We are unwrapping it
27
+ # to keep the same interface. But we may want to coerce it to some internal object in the future.
28
+ def coerce_exception
29
+ resp = yield
30
+ if resp.class.name.start_with?('Elasticsearch::API::Response')
31
+ resp = resp.body
32
+ end
33
+ resp
34
+ rescue => exception
35
+ name = Hstring.new(exception.class.name)
36
+ if /^(Elasticsearch|Elastic|OpenSearch)?::Transport::Transport::Errors/.match?(name.value) && \
37
+ (exception_class = Esse::Transport::ERRORS[name.demodulize.value])
38
+ raise exception_class.new(exception.message)
39
+ else
40
+ raise exception
41
+ end
42
+ end
43
+ end
44
+ end
data/lib/esse/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Esse
4
- VERSION = '0.2.2'
4
+ VERSION = '0.2.3'
5
5
  end
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.2.2
4
+ version: 0.2.3
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: 2023-02-14 00:00:00.000000000 Z
11
+ date: 2023-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '3.0'
103
+ version: '3.12'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '3.0'
110
+ version: '3.12'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: webmock
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -198,9 +198,11 @@ dependencies:
198
198
  - - "~>"
199
199
  - !ruby/object:Gem::Version
200
200
  version: '2.4'
201
- description: All the elegance of ruby with the elasticsearch flexibility. This gem
202
- is a pretty simple but excential helpers to deal with mapping, indexing, serialization
203
- and search.
201
+ description: With all elegance of Ruby and ElasticSearch flexibility this gem brings
202
+ to you the best of both worlds. Provides a solid architecture allowing to easily
203
+ Extract, Transform, Enrich and Load data from any data source into ElasticSearch/OpenSearch
204
+ and also to search it. It is framework-agnostic, which means you can use it with
205
+ any Ruby framework or even without any framework at all.
204
206
  email:
205
207
  - mgzmaster@gmail.com
206
208
  executables:
@@ -210,18 +212,6 @@ extra_rdoc_files: []
210
212
  files:
211
213
  - exec/esse
212
214
  - lib/esse.rb
213
- - lib/esse/backend/index.rb
214
- - lib/esse/backend/index/aliases.rb
215
- - lib/esse/backend/index/close.rb
216
- - lib/esse/backend/index/create.rb
217
- - lib/esse/backend/index/delete.rb
218
- - lib/esse/backend/index/documents.rb
219
- - lib/esse/backend/index/existance.rb
220
- - lib/esse/backend/index/open.rb
221
- - lib/esse/backend/index/refresh.rb
222
- - lib/esse/backend/index/reset.rb
223
- - lib/esse/backend/index/update.rb
224
- - lib/esse/backend/repository_backend.rb
225
215
  - lib/esse/cli.rb
226
216
  - lib/esse/cli/base.rb
227
217
  - lib/esse/cli/event_listener.rb
@@ -239,12 +229,10 @@ files:
239
229
  - lib/esse/cli/index/update_settings.rb
240
230
  - lib/esse/cli/templates/collection.rb.erb
241
231
  - lib/esse/cli/templates/config.rb.erb
232
+ - lib/esse/cli/templates/document.rb.erb
242
233
  - lib/esse/cli/templates/index.rb.erb
243
234
  - lib/esse/cli/templates/mappings.json
244
- - lib/esse/cli/templates/serializer.rb.erb
245
235
  - lib/esse/cli/templates/settings.json
246
- - lib/esse/client_proxy.rb
247
- - lib/esse/client_proxy/search.rb
248
236
  - lib/esse/cluster.rb
249
237
  - lib/esse/cluster_engine.rb
250
238
  - lib/esse/collection.rb
@@ -252,8 +240,13 @@ files:
252
240
  - lib/esse/core.rb
253
241
  - lib/esse/deprecations.rb
254
242
  - lib/esse/deprecations/cluster.rb
243
+ - lib/esse/deprecations/deprecate.rb
255
244
  - lib/esse/deprecations/index.rb
245
+ - lib/esse/deprecations/index_backend_delegator.rb
256
246
  - lib/esse/deprecations/repository.rb
247
+ - lib/esse/deprecations/repository_backend_delegator.rb
248
+ - lib/esse/deprecations/serializer.rb
249
+ - lib/esse/document.rb
257
250
  - lib/esse/dynamic_template.rb
258
251
  - lib/esse/errors.rb
259
252
  - lib/esse/events.rb
@@ -265,10 +258,12 @@ files:
265
258
  - lib/esse/import/request_body.rb
266
259
  - lib/esse/index.rb
267
260
  - lib/esse/index/actions.rb
261
+ - lib/esse/index/aliases.rb
268
262
  - lib/esse/index/attributes.rb
269
- - lib/esse/index/backend.rb
270
263
  - lib/esse/index/base.rb
271
264
  - lib/esse/index/descendants.rb
265
+ - lib/esse/index/documents.rb
266
+ - lib/esse/index/indices.rb
272
267
  - lib/esse/index/inheritance.rb
273
268
  - lib/esse/index/mappings.rb
274
269
  - lib/esse/index/object_document_mapper.rb
@@ -287,12 +282,17 @@ files:
287
282
  - lib/esse/primitives/output.rb
288
283
  - lib/esse/repository.rb
289
284
  - lib/esse/repository/actions.rb
290
- - lib/esse/repository/backend.rb
285
+ - lib/esse/repository/documents.rb
291
286
  - lib/esse/repository/object_document_mapper.rb
292
287
  - lib/esse/search/query.rb
293
288
  - lib/esse/search/response.rb
294
- - lib/esse/serializer.rb
295
289
  - lib/esse/template_loader.rb
290
+ - lib/esse/transport.rb
291
+ - lib/esse/transport/aliases.rb
292
+ - lib/esse/transport/documents.rb
293
+ - lib/esse/transport/health.rb
294
+ - lib/esse/transport/indices.rb
295
+ - lib/esse/transport/search.rb
296
296
  - lib/esse/version.rb
297
297
  homepage: https://github.com/marcosgz/esse
298
298
  licenses:
@@ -316,9 +316,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
316
316
  - !ruby/object:Gem::Version
317
317
  version: '0'
318
318
  requirements: []
319
- rubygems_version: 3.0.3.1
319
+ rubygems_version: 3.2.32
320
320
  signing_key:
321
321
  specification_version: 4
322
- summary: Pure Ruby toolkit based on official elasticsearch-ruby library. (No! It isn't
323
- a new DSL)
322
+ summary: Pure Ruby and framework-agnostic ElasticSearch/OpenSearch toolkit for building
323
+ indexers and searchers
324
324
  test_files: []
@@ -1,73 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Esse
4
- module Backend
5
- class Index
6
- module InstanceMethods
7
- # Return a list of index aliases.
8
- #
9
- # @param options [Hash] Hash of paramenters that will be passed along to elasticsearch request
10
- # @param options [Array] :index list of serialized documents to be indexed(Optional)
11
- #
12
- # @see https://www.elastic.co/guide/en/elasticsearch/reference/7.5/indices-aliases.html
13
- def aliases(**options)
14
- response = coerce_exception { client.indices.get_alias({ index: index_name, name: '*' }.merge(options)) }
15
- idx_name = response.keys.find { |idx| idx.start_with?(index_name) }
16
- return [] unless idx_name
17
-
18
- response.dig(idx_name, 'aliases')&.keys || []
19
- rescue NotFoundError
20
- []
21
- end
22
-
23
- # Returns a list of indices.
24
- #
25
- # @param options [Hash] Hash of paramenters that will be passed along to elasticsearch request
26
- # @return [Array] list of indices that match with `index_name`.
27
- def indices(**options)
28
- coerce_exception { client.indices.get_alias({ name: index_name }.merge(options)).keys }
29
- rescue NotFoundError
30
- []
31
- end
32
-
33
- # Replaces all existing aliases by the respective suffixed index from argument.
34
- #
35
- # @param options [Hash] Hash of paramenters that will be passed along to elasticsearch request
36
- # @option [String] :suffix The suffix of the index used for versioning.
37
- # @raise [Esse::Backend::NotFoundError] in case of failure
38
- # @return [Hash] the elasticsearch response
39
- def update_aliases!(suffix:, **options)
40
- raise(ArgumentError, 'index suffix cannot be nil') if suffix.nil?
41
-
42
- options[:body] = {
43
- actions: [
44
- *indices.map do |index|
45
- { remove: { index: index, alias: index_name } }
46
- end,
47
- { add: {index: build_real_index_name(suffix), alias: index_name } }
48
- ],
49
- }
50
-
51
- Esse::Events.instrument('elasticsearch.update_aliases') do |payload|
52
- payload[:request] = options
53
- payload[:response] = coerce_exception { client.indices.update_aliases(options)}
54
- end
55
- end
56
-
57
- # Replaces all existing aliases by the respective suffixed index from argument.
58
- #
59
- # @param options [Hash] Hash of paramenters that will be passed along to elasticsearch request
60
- # @option [String] :suffix The suffix of the index used for versioning.
61
- # @raise [Esse::Backend::NotFoundError] in case of failure
62
- # @return [Hash] the elasticsearch response, or an hash with 'errors' as true in case of failure
63
- def update_aliases(suffix:, **options)
64
- update_aliases!(suffix: suffix, **options)
65
- rescue NotFoundError
66
- { 'errors' => true }
67
- end
68
- end
69
-
70
- include InstanceMethods
71
- end
72
- end
73
- end
@@ -1,54 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Esse
4
- module Backend
5
- class Index
6
- module InstanceMethods
7
- # Close an index (keep the data on disk, but deny operations with the index).
8
- #
9
- # @option options [String, nil] :suffix The index suffix. Defaults to the index_version.
10
- # Use nil if you want to check existence of the `index_name` index or alias.
11
- # @option options [String] :expand_wildcards Whether to expand wildcard expression to concrete indices that
12
- # are open, closed or both. (options: open, closed)
13
- # @option options [String] :ignore_indices When performed on multiple indices, allows to ignore
14
- # `missing` ones (options: none, missing) @until 1.0
15
- # @option options [Boolean] :ignore_unavailable Whether specified concrete indices should be ignored when
16
- # unavailable (missing, closed, etc)
17
- # @option options [Time] :timeout Explicit operation timeout
18
- # @raise [Esse::Backend::ServerError]
19
- # in case of failure
20
- # @return [Hash] the elasticsearch response
21
- #
22
- # @see https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-open-close.html
23
- def close!(suffix: index_version, **options)
24
- Esse::Events.instrument('elasticsearch.close') do |payload|
25
- payload[:request] = attributes = options.merge(index: index_name(suffix: suffix))
26
- payload[:response] = coerce_exception { client.indices.close(**attributes) }
27
- end
28
- end
29
-
30
- # Close an index (keep the data on disk, but deny operations with the index).
31
- #
32
- # @option options [String, nil] :suffix The index suffix. Defaults to the index_version.
33
- # Use nil if you want to check existence of the `index_name` index or alias.
34
- # @option options [String] :expand_wildcards Whether to expand wildcard expression to concrete indices that
35
- # are open, closed or both. (options: open, closed)
36
- # @option options [String] :ignore_indices When performed on multiple indices, allows to ignore
37
- # `missing` ones (options: none, missing) @until 1.0
38
- # @option options [Boolean] :ignore_unavailable Whether specified concrete indices should be ignored when
39
- # unavailable (missing, closed, etc)
40
- # @option options [Time] :timeout Explicit operation timeout
41
- # @return [Hash] the elasticsearch response, or an hash with 'errors' as true in case of failure
42
- #
43
- # @see https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-open-close.html
44
- def close(suffix: index_version, **options)
45
- close!(suffix: suffix, **options)
46
- rescue ServerError
47
- { 'errors' => true }
48
- end
49
- end
50
-
51
- include InstanceMethods
52
- end
53
- end
54
- end
@@ -1,67 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Esse
4
- module Backend
5
- class Index
6
- module InstanceMethods
7
- DEFAULT_OPTIONS = {
8
- alias: true,
9
- }.freeze
10
-
11
- # Creates index and applies mappings and settings.
12
- #
13
- # UsersIndex.elasticsearch.create_index # creates index named `<prefix_>users_<suffix|index_version|timestamp>`
14
- #
15
- # @param options [Hash] Options hash
16
- # @option options [Boolean] :alias Update `index_name` alias along with the new index
17
- # @option options [String] :suffix The index suffix. Defaults to the `IndexClass#index_version` or
18
- # `Esse.timestamp`. Suffixed index names might be used for zero-downtime mapping change.
19
- # @return [Hash] the elasticsearch response, or an hash with 'errors' as true in case of failure
20
- #
21
- # @see http://www.elasticsearch.org/blog/changing-mapping-with-zero-downtime/
22
- def create_index(suffix: index_version, **options)
23
- create_index!(suffix: suffix, **options)
24
- rescue ServerError
25
- { 'errors' => true }
26
- end
27
-
28
- # Creates index and applies mappings and settings.
29
- #
30
- # UsersIndex.elasticsearch.create_index! # creates index named `<prefix_>users_<suffix|index_version|timestamp>`
31
- #
32
- # @param options [Hash] Options hash
33
- # @option options [Boolean] :alias Update `index_name` alias along with the new index
34
- # @option options [String] :suffix The index suffix. Defaults to the `IndexClass#index_version` or
35
- # `Esse.timestamp`. Suffixed index names might be used for zero-downtime mapping change.
36
- # @option arguments [String] :wait_for_active_shards Set the number of active shards
37
- # to wait for before the operation returns.
38
- # @option arguments [Time] :timeout Explicit operation timeout
39
- # @option arguments [Time] :master_timeout Specify timeout for connection to master
40
- # @option arguments [Hash] :headers Custom HTTP headers
41
- # @option arguments [Hash] :body The configuration for the index (`settings` and `mappings`)
42
- # @raise [Esse::Backend::NotFoundError] when index already exists
43
- # @return [Hash] the elasticsearch response
44
- #
45
- # @see http://www.elasticsearch.org/blog/changing-mapping-with-zero-downtime/
46
- def create_index!(suffix: index_version, **options)
47
- options = DEFAULT_OPTIONS.merge(options)
48
- name = build_real_index_name(suffix)
49
- definition = [settings_hash, mappings_hash].reduce(&:merge)
50
-
51
- if options.delete(:alias) && name != index_name
52
- definition[:aliases] = { index_name => {} }
53
- end
54
-
55
- Esse::Events.instrument('elasticsearch.create_index') do |payload|
56
- payload[:request] = opts = options.merge(index: name, body: definition)
57
- payload[:response] = response = coerce_exception { client.indices.create(**opts) }
58
- coerce_exception { cluster.wait_for_status! } if response
59
- response
60
- end
61
- end
62
- end
63
-
64
- include InstanceMethods
65
- end
66
- end
67
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Esse
4
- module Backend
5
- class Index
6
- module InstanceMethods
7
- # Deletes ES index
8
- #
9
- # UsersIndex.elasticsearch.delete_index! # deletes `<prefix_>users<_suffix|_index_version|_timestamp>` index
10
- #
11
- # @param suffix [String, nil] The index suffix Use nil if you want to delete the current index.
12
- # @raise [Esse::Backend::NotFoundError] when index does not exists
13
- # @return [Hash] elasticsearch response
14
- def delete_index!(suffix: index_version, **options)
15
- Esse::Events.instrument('elasticsearch.delete_index') do |payload|
16
- payload[:request] = opts = options.merge(index: index_name(suffix: suffix))
17
- payload[:response] = response = coerce_exception { client.indices.delete(**opts) }
18
- coerce_exception { cluster.wait_for_status! } if response
19
- response
20
- end
21
- end
22
-
23
- # Deletes ES index
24
- #
25
- # UsersIndex.elasticsearch.delete_index # deletes `<prefix_>users<_suffix|_index_version|_timestamp>` index
26
- #
27
- # @param suffix [String, nil] The index suffix Use nil if you want to delete the current index.
28
- # @return [Hash] the elasticsearch response, or an hash with 'errors' as true in case of failure
29
- def delete_index(suffix: index_version, **options)
30
- delete_index!(suffix: suffix, **options)
31
- rescue ServerError
32
- { 'errors' => true }
33
- end
34
- end
35
-
36
- include InstanceMethods
37
- end
38
- end
39
- end