elasticsearch.exceptions.RequestError: RequestError(400, 'resource_already_exists_exception', 'index [...] already exists') in Python beheben

English Deutsch

Problem:

Ein ElasticSearch-Index soll in Python mit Code wie

es_create_index_example.py
es.indices.create("nodes") # Create an index names "nodes"

erstellt werden, aber es erscheint die folgende Fehlermeldung:

es_traceback.txt
Traceback (most recent call last):
  File "estest.py", line 22, in <module>
    es.indices.create("nodes")
  File "/usr/local/lib/python3.8/dist-packages/elasticsearch/client/utils.py", line 168, in _wrapped
    return func(*args, params=params, headers=headers, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/elasticsearch/client/indices.py", line 123, in create
    return self.transport.perform_request(
  File "/usr/local/lib/python3.8/dist-packages/elasticsearch/transport.py", line 415, in perform_request
    raise e
  File "/usr/local/lib/python3.8/dist-packages/elasticsearch/transport.py", line 381, in perform_request
    status, headers_response, data = connection.perform_request(
  File "/usr/local/lib/python3.8/dist-packages/elasticsearch/connection/http_urllib3.py", line 277, in perform_request
    self._raise_error(response.status, raw_data)
  File "/usr/local/lib/python3.8/dist-packages/elasticsearch/connection/base.py", line 330, in _raise_error
    raise HTTP_EXCEPTIONS.get(status_code, TransportError)(
elasticsearch.exceptions.RequestError: RequestError(400, 'resource_already_exists_exception', 'index [nodes/mXAiBt0wTKK4Y31HpshVbw] already exists')

Lösung

Die Fehlermeldung besagt, dass der zu erstellende Index bereits existiert!

Die einfachste Lösung ist, den Code aus unserem Beitrag ElasticSearch-Index erstellen, wenn er noch nicht existiert, in Python zu verwenden:

es_create_index_helper.py
def es_create_index_if_not_exists(es, index):
    """Create the given ElasticSearch index and ignore error if it already exists"""
    try:
        es.indices.create(index)
    except elasticsearch.exceptions.RequestError as ex:
        if ex.error == 'resource_already_exists_exception':
            pass # Index already exists. Ignore.
        else: # Other exception - raise it
            raise ex

und diese Funktion verwenden, um den Index zu erstellen:

es_create_index_usage.py
es_create_index_if_not_exists(es, "nodes") # Creates the "nodes" index ; doesn't fail if it already exists

Check out similar posts by category: Databases, ElasticSearch, Python