首先,很抱歉没有 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”没有帮助。
我可能可以重构此代码以使用批量删除,但我想了解这里出了什么问题
附注我正在使用官方的 python 客户端
最佳答案
如果在删除后使用 sleep()
会使文档消失,那么这与缓存无关。这是关于 refresh_interval
and the near real timeness or Elasticsearch .
因此,请在代码离开 for
循环后调用 _refresh
。另外,不要逐个删除文档,而是创建一个 _bulk
请求,根据文档的数量批量删除所有文档。
关于python - 如何禁用查询缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37066235/