如何禁用查询缓存?

时间:2016-05-06 07:01:10

标签: python python-3.x elasticsearch

首先,抱歉没有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客户端

1 个答案:

答案 0 :(得分:3)

如果删除后使用sleep()使文档消失,则不是缓存。这是关于refresh_interval and the near real timeness or Elasticsearch

因此,在代码离开_refresh循环后调用for。此外,不要逐个文档删除,而是创建_bulk请求,批量删除所有文档,具体取决于它们的数量。