如何在Elasticsearch中通过ID删除多个文档?

时间:2018-12-08 00:55:15

标签: elasticsearch

我试图在Elasticsearch 2.4上一口气删除一小段文档,但似乎无法为其查询导致> 0个文档被删除。

id_list = ["AWeKNmt5qJi-jqXwc6qO", "AWeKT7ULqJi-jqXwc6qS"] #example

# The following does not delete any document (despite these ids being valid)
delres = es.delete_by_query("my_index", doc_type="my_doctype", body={
    "query": {
        "terms": {
            "_id": id_list
        }
    }
})

如果我一步一步走,那么将它们删除就好了。这似乎表明我的查询存在问题。

for the_id in id_list:
    es.delete("my_index", doc_type="my_doctype", id=the_id)

我也尝试过ids而不是terms查询,但这也不会删除任何内容。

es.delete_by_query(..., body = {"query": {"ids" { "values": id_list }}})

我想念什么?

1 个答案:

答案 0 :(得分:1)

delete_by_query在ES 1.5.3中已弃用,在ES 2.0中已删除,并在ES 5.0中重新引入。来自https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-delete-by-query.html

  

按查询删除将在2.0中删除:这是有问题的,因为它无声地强制执行刷新,该刷新会在并发索引期间迅速导致OutOfMemoryError,并且还可能导致主数据库和副本数据库变得不一致。而是使用滚动/扫描API查找所有匹配的ID,然后发出批量请求将其删除。