美文网首页
Elasticsearch delete by query超时问

Elasticsearch delete by query超时问

作者: FyK_21f8 | 来源:发表于2022-11-17 12:27 被阅读0次

    应产品要求,需要删除线上一个es大索引(6亿数据)里面的数据。没办法直接删除掉整个索引,所以只能使用delete_by_query的方式去删数据、
    上kibana dsl

    POST /xxxx-2022.11.16-000004/_delete_by_query
    {
      "query": {
        "term": {
          "task_id": {
            "value": "xxxxxxx"
          }
        }
      },
      "track_total_hits": true
    }
    

    执行完稍微等待了一下,显示成功但是实际上并没有删除多少数据。估计是目标数据量大,响应超时的原因没有删除掉。所以换成异步任务的方式去删除。

    异步删除dsl,其实就是在请求后面添加参数wait_for_completion=false

    # 请求dsl
    POST /xxxx-2022.11.16-000004/_delete_by_query?wait_for_completion=false
    {
      "query": {
        "match_all": {}
        
      },
      "track_total_hits": true
    }
    
    # 响应
    {
      "task": "EIdR8ob4RwekvX4E5eGRWA:48491853"
    }
    

    根据任务的id查询任务进度

    GET _tasks/EIdR8ob4RwekvX4E5eGRWA:48491853
    

    查询正在执行的异步删除任务

    # 其中actions是可以换成别的异步任务类型的
    GET _tasks?detailed=true&actions=*/delete/byquery
    

    取消正在执行的异步任务

    POST _tasks/EIdR8ob4RwekvX4E5eGRWA:48491853/_cancel
    

    虽然是可以执行了,但是执行得比较慢。看看后续有没有别的优化方式。

    相关文章

      网友评论

          本文标题:Elasticsearch delete by query超时问

          本文链接:https://www.haomeiwen.com/subject/bjuyxdtx.html