【问题标题】:Elastic Search, delete_by_query takes a long time to finish and causes http request to timeout弹性搜索,delete_by_query 需要很长时间才能完成并导致 http 请求超时
【发布时间】:2018-06-20 04:30:35
【问题描述】:

删除仍在进行,但服务器抛出异常,因为它花费的时间太长。在服务器端处理这个问题的最佳方法是什么?

delete_by_query api 文档说它将返回一个任务,以便我可以跟踪删除进度。

如果请求包含 wait_for_completion=false,则 Elasticsearch 将执行一些预检检查,启动请求,然后返回一个任务,该任务可与 Tasks API 一起使用以取消或获取任务的状态。 Elasticsearch 还将在 .tasks/task/${taskId} 中创建此任务的记录作为文档。这是您认为合适的保留或删除。完成后,将其删除,以便 Elasticsearch 可以回收它使用的空间。

如何获取此任务 ID?它不在 HTTP 响应中,在超时场景中,甚至可能没有 HTTP 响应。

GET _tasks?detailed=true&actions=*/delete/byquery 将返回一个删除任务列表,但我只想要一个任务。如果有两个任务正在运行,我怎么知道我正在寻找哪一个?

谢谢。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    弹性搜索 6

    创建任务:

    nick@work:
    curl -X POST "es-prices-ape:9200/prices /_delete_by_query?wait_for_completion=false" -H 'Content-Type: application/json' -d'
    {
      "query": {
        "term": {
          "cella_id": "58259"
        }
      }
    }
    '
    
    {"task":"GChf5jO9Q2Sti-Qi1G-oAw:12221137"}
    

    获取任务信息:

    nick@nick-home:~$ curl -X GET "es-prices-ape:9200/_tasks/{GChf5jO9Q2Sti-Qi1G-oAw:12221137}"
    
    {"completed":true,"task":{"node":"GChf5jO9Q2Sti-Qi1G-oAw","id":12221137,"type":"transport","action":"indices:data/write/delete/byquery","status":{
    "total" : 0,
    "updated" : 0,
    "created" : 0,
    "deleted" : 0,
    "batches" : 0,
    "version_conflicts" : 0,
    "noops" : 0,
    ....
    

    【讨论】:

    • 感谢wait_for_completion=false 的示例。它在 ES 5.5 上也能正常工作
    猜你喜欢
    • 2020-10-17
    • 1970-01-01
    • 2018-02-07
    • 2016-07-30
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多