首页/数据/NoSQL 速查/_delete_by_query 按条件批量删除
Elasticsearch89 条

_delete_by_query 按条件批量删除

delete_by_query 按查询删除文档并保留索引结构,同样支持切片并行与冲突策略;删除量极大时会留下大量墓碑段,需要配合 force merge 或等待合并。

NoSQL 速查数据更新于 2026-10-12
接口POST /<index>/_delete_by_query
常用参数conflicts=proceed、slices=auto、wait_for_completion=false
返回deleted、version_conflicts、batches、failures 等计数

示例

示例
POST /logs-2024/_delete_by_query?conflicts=proceed
{
  "query": {
    "range": { "@timestamp": { "lt": "now-90d" } }
  }
}
定期清理历史数据优先用 ILM 的 delete 阶段或按时间切索引后直接删索引,比逐条删除更省资源。

易错点

  • 查询条件写错时无法回滚,执行前先用 _count 核对命中数量
  • 删除文档不会立刻释放磁盘,空间要等段合并后才回收

数据来源与参考

  • Elasticsearch Guide: Delete By Query API
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌