首先,抱歉没有100%明确的问题标题。 用几行代码解释起来比较容易:
query = {...}
while True:
elastic_response = elastic_client.search(elastic_index, body=query, request_cache=False)
if elastic_response["hits"]["total"]) == 0:
break
else:
for doc in elastic_response["hits"]["hits"]:
print("delete {}".format(doc["_id"]))
elastic_client.delete(index=elastic_index, doc_type=doc["_type"], id=doc["_id"])
我进行搜索,然后删除所有文档,然后再次搜索以获得下一组 但是搜索查询给了我相同的文档!这导致404删除异常。它必须是某种缓存,但我没有找到任何东西,“request_cache”没有帮助。
我可以重构这段代码以使用批量删除,但我想了解这里有什么问题
P.S。我正在使用官方python客户端
答案 0 :(得分:3)
如果删除后使用sleep()
使文档消失,则不是缓存。这是关于refresh_interval
and the near real timeness or Elasticsearch。
因此,在代码离开_refresh
循环后调用for
。此外,不要逐个文档删除,而是创建_bulk
请求,批量删除所有文档,具体取决于它们的数量。