Elasticsearch: 如何使用 python 删除索引

原谅我,如果这是相当基本的,但我有 Python 2.7和 Elasticsearch 2.1.1,我只是试图删除一个索引使用

es.delete(index='researchtest', doc_type='test')

但这给了我

return func(*args, params=params, **kwargs)
TypeError: delete() takes at least 4 arguments (4 given)

我也试过

es.delete_by_query(index='researchtest', doc_type='test',body='{"query":{"match_all":{}}}')

但我明白

AttributeError: 'Elasticsearch' object has no attribute 'delete_by_query'

知道为什么吗? 是不是因为 python 的 API 改为2.1.1了?

Https://elasticsearch-py.readthedocs.org/en/master/api.html#elasticsearch.client

62856 次浏览

For ES 8+ use:

from elasticsearch import Elasticsearch
es = Elasticsearch()


es.options(ignore_status=[400,404]).indices.delete(index='test-index')

For older versions use this notation:

from elasticsearch import Elasticsearch
es = Elasticsearch()


es.indices.delete(index='test-index', ignore=[400, 404])

If you have a document object (model) and you're using elasticsearch-dsl, specially with Python-3.X you can directly call the delete method of your model's _index attribute.

ClassName._index.delete()

Also as it's stated in documentation:

The _index attribute is also home to the load_mappings method which will update the mapping on the Index from elasticsearch. This is very useful if you use dynamic mappings and want the class to be aware of those fields (for example if you wish the Date fields to be properly (de)serialized):

Post._index.load_mappings()

Since passing transport options in the API method is deprecated in the Elasticsearch python client 8+, the way to specify HTTP status codes that should be ignored (e.g. to prevent errors in case the target index does not exist) would be by using Elasticsearch.options() now:

from elasticsearch import Elasticsearch
es = Elasticsearch()


es.options(ignore_status=[400,404]).indices.delete(index='test-index')

(see documentation).

If you're using elasticsearch-dsl, use

from elasticsearch_dsl import Index


index = Index('test-index')
index.delete(ignore=[400, 404])

if you using old version ES 8+:

from elasticsearch import Elasticsearch
es = Elasticsearch(http://localhost:9200)


# Delete
es.indices.delete(index='name_index', ignore=[400, 404])