esse 0.2.2 → 0.2.3

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 (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