繁体   English   中英

使用python删除elasticsearch中的特定文档

[英]Delete specific docs in elasticsearch using python

我是 ElasticSearch 的新手。 我正在尝试使用 python 从http://localhost:9200/es_index/es_type中删除一组数据。

假设x=['a','b','c','d','e','f']是我要删除的_ids列表

代码:

from elasticsearch import Elasticsearch 
es = Elasticsearch()
request_body = {
        "query": {
            "ids": {
                "values": ['a','b','c','d','e','f']
            }
        }
    }
es.delete_by_query(index=es_index, body=request_body)

但是当我检查http://localhost:9200/es_index/es_type时,数据仍然存在。

请在评论中指定您的 ES 和elasticsearch-py版本。 此外,您忘记在代码中提及es_index的值,因此请确保传递正确的值。

如果索引设置正确, delete_by_query的问题通常来自查询本身。 尝试使用相同的正文运行一个简单的search ,并检查您是否获得了所需的结果。 这样做总是明智的,以防止错误。

在您的情况下,您知道 id,因此使用es.delete并传递 id 值更合适:

for id in ids:
    es.delete(es_index=index, doc_type=_type, id=id)

对于许多文档,您应该考虑使用bulk帮助程序来提高性能。 这里查看答案。

另一个选项是 delete_by_query,您可以在其中直接传递 product_id 列表。

es = Elasticsearch()

def delete_by_id(index, ids):
    query = {"query": {"terms": {"Product_Id":ids}}}
    es.delete_by_query(index=index, body=query)code here

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM