我试图在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 }}})
我想念什么?
答案 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,然后发出批量请求将其删除。