How to fix elasticsearch.exceptions.RequestError: RequestError(400, 'resource_already_exists_exception', 'index [...] already exists') in Python
Problem:
You want to create an ElasticSearch index in Python using code like
es.indices.create("nodes") # Create an index names "nodes"
but you see the following error message:
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')
Solution
The error message tells you that the index you are trying to create already exists!
The simples solution is to use the code from our post on How to create ElasticSearch index if it doesn’t already exist in Python:
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
and use that function to create your index:
es_create_index_if_not_exists(es, "nodes") # Creates the "nodes" index ; doesn't fail if it already exists