Elasticsearch delete by query超时问

2022-11-17  本文已影响0人  FyK_21f8

应产品要求,需要删除线上一个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

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

上一篇下一篇

猜你喜欢

热点阅读