添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

Forgive me if this is quite basic but I have Python 2.7 and Elasticsearch 2.1.1 and I am just trying to delete an index using

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

but this gives me

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

I also tried

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

but I get

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

Any idea why? Has the api changed for 2.1.1 for python?

https://elasticsearch-py.readthedocs.org/en/master/api.html#elasticsearch.client.IndicesClient.delete

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])
                This command returns a deprecation warning message for ElasticSearch python client 8+. So, it's alternative for ES 8+ is:   es.options(ignore_status=[400,404]).indices.delete(index='test-index')
– Aida.Mirabadi
                May 23, 2022 at 6:23

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 using old version ES 8+:

from elasticsearch import Elasticsearch
es = Elasticsearch(http://localhost:9200)
# Delete
es.indices.delete(index='name_index', ignore=[400, 404])
        

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.