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
虽然是可以执行了,但是执行得比较慢。看看后续有没有别的优化方式。