Class: ElastomerClient::Client::Index

Inherits:
Object
  • Object
show all
Defined in:
lib/elastomer_client/client/index.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client, name) ⇒ Index

Create a new index client for making API requests that pertain to the health and management of individual indexes.

client - ElastomerClient::Client used for HTTP requests to the server name - The name of the index as a String or an Array of names



27
28
29
30
# File 'lib/elastomer_client/client/index.rb', line 27

def initialize(client, name)
  @client = client
  @name   = @client.assert_param_presence(name, "index name") unless name.nil?
end

Instance Attribute Details

#clientObject (readonly)

Returns the value of attribute client.



32
33
34
# File 'lib/elastomer_client/client/index.rb', line 32

def client
  @client
end

#nameObject (readonly)

Returns the value of attribute name.



32
33
34
# File 'lib/elastomer_client/client/index.rb', line 32

def name
  @name
end

Instance Method Details

#add_alias(name, params = {}) ⇒ Object

Add a single alias to this index.

name - Name of the alias to add to the index params - Parameters Hash

:routing - optional routing that can be associated with an alias
:filter  - optional filter that can be associated with an alias

Examples

index.add_alias("foo", routing: "foo")

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html

Returns the response body as a Hash



202
203
204
205
# File 'lib/elastomer_client/client/index.rb', line 202

def add_alias(name, params = {})
  response = client.put "/{index}/_alias/{name}", update_params(params, name:, action: "index.add_alias", rest_api: "indices.put_alias")
  response.body
end

#analyze(text, params = {}) ⇒ Object

Perform the analysis process on some text and return the tokens breakdown of the text.

text - The text to analyze as a String params - Parameters Hash

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-analyze.html

Returns the response body as a Hash



234
235
236
237
238
# File 'lib/elastomer_client/client/index.rb', line 234

def analyze(text, params = {})
  body = text.is_a?(Hash) ? text : {text: text.to_s}
  response = client.get "{/index}/_analyze", update_params(params, body:, action: "index.analyze", rest_api: "indices.analyze")
  response.body
end

#bulk(params = {}, &block) ⇒ Object

Perform bulk indexing and/or delete operations. The current index name will be passed to the bulk API call as part of the request parameters.

params - Parameters Hash that will be passed to the bulk API call. block - Required block that is used to accumulate bulk API operations.

All the operations will be passed to the search cluster via a
single API request.

Yields a Bulk instance for building bulk API call bodies.

Examples

index.bulk do |b|
  b.index( document1 )
  b.index( document2 )
  b.delete( document3 )
  ...
end

See www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html

Returns the response body as a Hash



390
391
392
393
394
395
# File 'lib/elastomer_client/client/index.rb', line 390

def bulk(params = {}, &block)
  raise "a block is required" if block.nil?

  params = {index: self.name}.merge params
  client.bulk params, &block
end

#clear_cache(params = {}) ⇒ Object

Clear caches for one or more indices. Individual caches can be specified with parameters.

params - Parameters Hash

:index - set to "_all" to clear all index caches

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-clearcache.html

Returns the response body as a Hash



305
306
307
308
# File 'lib/elastomer_client/client/index.rb', line 305

def clear_cache(params = {})
  response = client.post "{/index}/_cache/clear", update_params(params, action: "index.clear_cache", rest_api: "indices.clear_cache")
  response.body
end

#close(params = {}) ⇒ Object

Close the index.

params - Parameters Hash

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-open-close.html

Returns the response body as a Hash



94
95
96
97
# File 'lib/elastomer_client/client/index.rb', line 94

def close(params = {})
  response = client.post "/{index}/_close", update_params(params, action: "index.close", rest_api: "indices.close")
  response.body
end

#create(body, params = {}) ⇒ Object

Create the index.

body - The index settings and mappings as a Hash or a JSON encoded String params - Parameters Hash

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html

Returns the response body as a Hash



58
59
60
61
# File 'lib/elastomer_client/client/index.rb', line 58

def create(body, params = {})
  response = client.put "/{index}", update_params(params, body:, action: "index.create", rest_api: "indices.create")
  response.body
end

#defaultsObject

Internal: Returns a Hash containing default parameters.



565
566
567
# File 'lib/elastomer_client/client/index.rb', line 565

def defaults
  { index: name }
end

#delete(params = {}) ⇒ Object

Delete the index.

params - Parameters Hash

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-delete-index.html

Returns the response body as a Hash



70
71
72
73
# File 'lib/elastomer_client/client/index.rb', line 70

def delete(params = {})
  response = client.delete "/{index}", update_params(params, action: "index.delete", rest_api: "indices.delete")
  response.body
end

#delete_alias(name, params = {}) ⇒ Object

Delete an alias from this index.

name - Name of the alias to delete from the index params - Parameters Hash

Examples

index.delete_alias("foo")
index.delete_alias(["foo", "bar"])

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html

Returns the response body as a Hash



220
221
222
223
# File 'lib/elastomer_client/client/index.rb', line 220

def delete_alias(name, params = {})
  response = client.delete "/{index}/_alias/{name}", update_params(params, name:, action: "index.delete_alias", rest_api: "indices.delete_alias")
  response.body
end

#delete_by_query(query, params = nil) ⇒ Object

Delete documents by query



511
512
513
# File 'lib/elastomer_client/client/index.rb', line 511

def delete_by_query(query, params = nil)
  docs.send(:native_delete_by_query, query, params)
end

#docs(type = nil) ⇒ Object

Provides access to document-level API commands. These commands will be scoped to this index and the give ‘type`, if any.

type - The document type as a String

See www.elastic.co/guide/en/elasticsearch/reference/current/docs.html

Returns a Docs instance.



350
351
352
353
# File 'lib/elastomer_client/client/index.rb', line 350

def docs(type = nil)
  type = "_doc" if client.version_support.es_version_8_plus?
  client.docs name, type
end

#exists?(params = {}) ⇒ Boolean Also known as: exist?

Check for the existence of the index. If a ‘:type` option is given, then we will check for the existence of the document type in the index.

params - Parameters Hash

:type - optional type mapping as a String

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-exists.html and www.elastic.co/guide/en/elasticsearch/reference/current/indices-types-exists.html

Returns true if the index (or type) exists

Returns:

  • (Boolean)


44
45
46
47
# File 'lib/elastomer_client/client/index.rb', line 44

def exists?(params = {})
  response = client.head "/{index}{/type}", update_params(params, action: "index.exists", rest_api: "indices.exists")
  response.success?
end

#flush(params = {}) ⇒ Object

Flush one or more indices to the index storage.

params - Parameters Hash

:index - set to "_all" to flush all indices

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-flush.html

Returns the response body as a Hash



262
263
264
265
# File 'lib/elastomer_client/client/index.rb', line 262

def flush(params = {})
  response = client.post "{/index}/_flush", update_params(params, action: "index.flush", rest_api: "indices.flush")
  response.body
end

#forcemerge(params = {}) ⇒ Object Also known as: optimize

Force merge one or more indices. Force merging an index allows to reduce the number of segments but can be resource intensive.

params - Parameters Hash

:index - set to "_all" to force merge all indices

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-forcemerge.html

Returns the response body as a Hash



276
277
278
279
# File 'lib/elastomer_client/client/index.rb', line 276

def forcemerge(params = {})
  response = client.post "{/index}/_forcemerge", update_params(params, action: "index.forcemerge", rest_api: "indices.forcemerge")
  response.body
end

#get_alias(name, params = {}) ⇒ Object

Return the named aliases associated with this index.

name - Name of the alias to look up params - Parameters Hash

:ignore_unavailable - What to do if a specified index name doesn’t
                      exist. If set to `true` then those indices are ignored.

Examples

index.get_alias("*")       # returns all aliases for the current index
index.get_alias("issue*")  # returns all aliases starting with "issue"

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html

Returns the response body as a Hash



183
184
185
186
# File 'lib/elastomer_client/client/index.rb', line 183

def get_alias(name, params = {})
  response = client.get "/{index}/_alias/{name}", update_params(params, name:, action: "index.get_alias", rest_api: "indices.get_alias")
  response.body
end

#get_aliases(params = {}) ⇒ Object Also known as: aliases

Return the aliases associated with this index.

params - Parameters Hash

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html

Returns the response body as a Hash



162
163
164
165
# File 'lib/elastomer_client/client/index.rb', line 162

def get_aliases(params = {})
  response = client.get "/{index}/_alias", update_params(action: "index.get_aliases", rest_api: "indices.get_alias")
  response.body
end

#get_mapping(params = {}) ⇒ Object Also known as: mapping

Retrieve one or more mappings from the index. To retrieve a specific mapping provide the name as the ‘:type` parameter.

params - Parameters Hash

:type - specific document type as a String or Array of Strings

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-get-mapping.html

Returns the response body as a Hash



134
135
136
137
# File 'lib/elastomer_client/client/index.rb', line 134

def get_mapping(params = {})
  response = client.get "/{index}/_mapping{/type}", update_params(params, action: "index.get_mapping", rest_api: "indices.get_mapping")
  response.body
end

#get_settings(params = {}) ⇒ Object Also known as: settings

Retrieve the settings for the index.

params - Parameters Hash

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-get-settings.html

Returns the response body as a Hash



106
107
108
109
# File 'lib/elastomer_client/client/index.rb', line 106

def get_settings(params = {})
  response = client.get "{/index}/_settings", update_params(params, action: "index.get_settings", rest_api: "indices.get_settings")
  response.body
end

#multi_percolate(params = {}, &block) ⇒ Object

Execute an array of percolate actions in bulk. Results are returned in an array in the order the actions were sent. The current index name will be passed to the API call as part of the request parameters.

See www.elastic.co/guide/en/elasticsearch/reference/current/search-percolate.html#_multi_percolate_api

params - Optional request parameters as a Hash block - Passed to a MultiPercolate instance which assembles the

percolate actions into a single request.

Examples

# block form
multi_percolate do |m|
  m.percolate({ author: "pea53" }, { type: 'default-type' })
  m.count({ author: "pea53" }, { type: 'type2' })
  ...
end

Returns the response body as a Hash



505
506
507
508
# File 'lib/elastomer_client/client/index.rb', line 505

def multi_percolate(params = {}, &block)
  params = defaults.merge params
  client.multi_percolate(params, &block)
end

#multi_search(params = {}, &block) ⇒ Object

Execute an array of searches in bulk. Results are returned in an array in the order the queries were sent. The current index name will be passed to the multi_search API call as part of the request parameters.

See www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html

params - Parameters Hash that will be passed to the API call. block - Required block that is used to accumulate searches.

All the operations will be passed to the search cluster
via a single API request.

Yields a MultiSearch instance for building multi_search API call bodies.

Examples

index.multi_search do |m|
  m.search({query: {match_all: {}}, size: 0)
  m.search({query: {field: {"author" => "grantr"}}}, type: 'tweet')
  ...
end

See www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html

Returns the response body as a Hash



478
479
480
481
482
483
# File 'lib/elastomer_client/client/index.rb', line 478

def multi_search(params = {}, &block)
  raise "a block is required" if block.nil?

  params = {index: self.name}.merge params
  client.multi_search params, &block
end

#native_delete_by_query(query, params = nil) ⇒ Object

Delete documents from one or more indices and one or more types based on a query using Elasticsearch’s _delete_by_query API.

See Client#native_delete_by_query for more information.

Returns a Hash of statistics about the delete operations as returned by _delete_by_query.

Raises ElastomerClient::Client::IncompatibleVersionException if this version of Elasticsearch does not support _delete_by_query.



525
526
527
# File 'lib/elastomer_client/client/index.rb', line 525

def native_delete_by_query(query, params = nil)
  docs.native_delete_by_query(query, params)
end

#open(params = {}) ⇒ Object

Open the index.

params - Parameters Hash

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-open-close.html

Returns the response body as a Hash



82
83
84
85
# File 'lib/elastomer_client/client/index.rb', line 82

def open(params = {})
  response = client.post "/{index}/_open", update_params(params, action: "index.open", rest_api: "indices.open")
  response.body
end

#percolator(id) ⇒ Object

Constructs a Percolator with the given id on this index.

Examples

index.percolator "1"

Returns a Percolator



546
547
548
# File 'lib/elastomer_client/client/index.rb', line 546

def percolator(id)
  Percolator.new(client, name, id)
end

#recovery(params = {}) ⇒ Object

Provides insight into ongoing index shard recoveries. Recovery status may be reported for specific indices, or cluster-wide.

params - Parameters Hash

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-recovery.html

Returns the response body as a Hash



291
292
293
294
# File 'lib/elastomer_client/client/index.rb', line 291

def recovery(params = {})
  response = client.get "{/index}/_recovery", update_params(params, action: "index.recovery", rest_api: "indices.recovery")
  response.body
end

#refresh(params = {}) ⇒ Object

Explicitly refresh one or more index, making all operations performed since the last refresh available for search.

params - Parameters Hash

:index - set to "_all" to refresh all indices

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-refresh.html

Returns the response body as a Hash



249
250
251
252
# File 'lib/elastomer_client/client/index.rb', line 249

def refresh(params = {})
  response = client.post "{/index}/_refresh", update_params(params, action: "index.refresh", rest_api: "indices.refresh")
  response.body
end

#scan(query, opts = {}) ⇒ Object

Create a new Scroller instance for scanning all results from a ‘query`. The Scroller will be scoped to the current index. The Scroller is configured to use `scan` semantics which are more efficient than a standard scroll query; the caveat is that the returned documents cannot be sorted.

query - The query to scan as a Hash or a JSON encoded String opts - Options Hash

:index  - the name of the index to search
:type   - the document type to search
:scroll - the keep alive time of the scrolling request (5 minutes by default)
:size   - the number of documents per shard to fetch per scroll

Examples

scan = index.scan('{"query":{"match_all":{}}}')
scan.each_document do |document|
  document['_id']
  document['_source']
end

See www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html

Returns a new Scroller instance



447
448
449
450
# File 'lib/elastomer_client/client/index.rb', line 447

def scan(query, opts = {})
  opts = {index: name}.merge opts
  client.scan query, opts
end

#scroll(query, opts = {}) ⇒ Object

Create a new Scroller instance for scrolling all results from a ‘query`. The Scroller will be scoped to the current index.

query - The query to scroll as a Hash or a JSON encoded String opts - Options Hash

:index  - the name of the index to search
:type   - the document type to search
:scroll - the keep alive time of the scrolling request (5 minutes by default)
:size   - the number of documents per shard to fetch per scroll

Examples

scroll = index.scroll('{"query":{"match_all":{}},"sort":{"date":"desc"}}')
scroll.each_document do |document|
  document['_id']
  document['_source']
end

See www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html

Returns a new Scroller instance



418
419
420
421
# File 'lib/elastomer_client/client/index.rb', line 418

def scroll(query, opts = {})
  opts = {index: name}.merge opts
  client.scroll query, opts
end

#segments(params = {}) ⇒ Object

Retrieve low level Lucene segments information for shards of one or more indices.

params - Parameters Hash

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-segments.html

Returns the response body as a Hash



337
338
339
340
# File 'lib/elastomer_client/client/index.rb', line 337

def segments(params = {})
  response = client.get "{/index}/_segments", update_params(params, action: "index.segments", rest_api: "indices.segments")
  response.body
end

#stats(params = {}) ⇒ Object

Retrieve statistics about one or more indices. Specific statistics can be retrieved with parameters.

params - Parameters Hash

:stats - a single stats value or an Array of stats values

Examples

stats(stats: "docs")
stats(stats: %w[flush merge])

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-stats.html

Returns the response body as a Hash



324
325
326
327
# File 'lib/elastomer_client/client/index.rb', line 324

def stats(params = {})
  response = client.get "{/index}/_stats{/stats}", update_params(params, action: "index.stats", rest_api: "indices.stats")
  response.body
end

#suggest(query, params = {}) ⇒ Object

Exposes the ‘/_suggest` endpoint of the Elasticsearch API.

query - The query body as a Hash params - Parameters Hash

See www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters.html

Returns the response body as a Hash



363
364
365
366
# File 'lib/elastomer_client/client/index.rb', line 363

def suggest(query, params = {})
  response = client.post "{/index}/_suggest", update_params(params, body: query, action: "index.suggest", rest_api: "suggest")
  response.body
end

#update_by_query(query, params = nil) ⇒ Object

Update documents by query using Elasticsearch’s _update_by_query API.

See Client#update_by_query for more information.

Returns a Hash of statistics about the update operations as returned by _update_by_query.



535
536
537
# File 'lib/elastomer_client/client/index.rb', line 535

def update_by_query(query, params = nil)
  docs.update_by_query(query, params)
end

#update_mapping(type, body, params = {}) ⇒ Object Also known as: put_mapping

Register specific mapping definition for a specific type.

type - Name of the mapping to update as a String body - The mapping values to update as a Hash or a JSON encoded String params - Parameters Hash

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html

Returns the response body as a Hash



149
150
151
152
# File 'lib/elastomer_client/client/index.rb', line 149

def update_mapping(type, body, params = {})
  response = client.put "/{index}/_mapping{/type}", update_params(params, body:, type:, action: "index.update_mapping", rest_api: "indices.put_mapping")
  response.body
end

#update_params(params, overrides = nil) ⇒ Object

Internal: Add default parameters to the ‘params` Hash and then apply `overrides` to the params if any are given.

params - Parameters Hash overrides - Optional parameter overrides as a Hash

Returns a new params Hash.



557
558
559
560
561
562
# File 'lib/elastomer_client/client/index.rb', line 557

def update_params(params, overrides = nil)
  h = defaults.update params
  h.update overrides unless overrides.nil?
  h.delete(:type) if client.version_support.es_version_8_plus?
  h
end

#update_settings(body, params = {}) ⇒ Object

Change specific index level settings in real time.

body - The index settings as a Hash or a JSON encoded String params - Parameters Hash

See www.elastic.co/guide/en/elasticsearch/reference/current/indices-update-settings.html

Returns the response body as a Hash



120
121
122
123
# File 'lib/elastomer_client/client/index.rb', line 120

def update_settings(body, params = {})
  response = client.put "{/index}/_settings", update_params(params, body:, action: "index.update_settings", rest_api: "indices.put_settings")
  response.body
end