python - 如何禁用查询缓存?

标签 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”没有帮助。

我可能可以重构此代码以使用批量删除,但我想了解这里出了什么问题

附注我正在使用官方的 python 客户端

最佳答案

如果在删除后使用 sleep() 会使文档消失,那么这与缓存无关。这是关于 refresh_interval and the near real timeness or Elasticsearch .

因此,请在代码离开 for 循环后调用 _refresh。另外,不要逐个删除文档,而是创建一个 _bulk 请求,根据文档的数量批量删除所有文档。

关于python - 如何禁用查询缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37066235/

相关文章:

python - 一百万个元素的列表在 Python 中会占用多少内存?

python-3.x - 无法将数据帧绘制为 barh,因为 TypeError : Empty 'DataFrame' : no numeric data to plot

Elasticsearch Kubernetes pod - 无法连接到端口 9300

Elasticsearch,嵌套对象的存在过滤器不起作用

python - 如何使用 Python 绑定(bind)在 ITK 中创建网格对象?

python - Matplotlib:带有日期和数值的散点图

python - 循环遍历 JSON 对象并将结果存储在 pandas dataframe 中

variables - Python select 存在带变量的 SQLite3

python - Airflow 2 - ModuleNotFoundError : No module named 'airflow.operators.text_processing_plugin'

c# - 反序列化对象中的Elasticsearch响应