首页/数据/NoSQL 速查/_update_by_query 按条件批量更新
Elasticsearch89 条

_update_by_query 按条件批量更新

update_by_query 先快照查询再逐条更新,默认遇版本冲突中止;大批量操作建议设 slices 并行、wait_for_completion=false 异步执行,并用 _tasks 跟踪。

NoSQL 速查数据更新于 2026-10-12
接口POST /<index>/_update_by_query
常用参数conflicts=proceed、slices=auto、refresh=true、wait_for_completion=false
前置条件文档必须保留 _source

示例

示例
POST /my-index/_update_by_query?conflicts=proceed&slices=auto
{
  "query": { "term": { "flag": true } },
  "script": {
    "source": "ctx._source.count += params.inc",
    "params": { "inc": 1 }
  }
}

# 异步执行后用任务接口跟踪
GET /_tasks?detailed=true&actions=*byquery
操作期间写入的新文档是否被处理取决于快照时刻,长任务结束后建议再跑一轮校验。

易错点

  • 在持续写入的索引上大范围更新会放大段合并压力,建议放低 refresh 频率或错峰执行
  • conflicts=proceed 会跳过冲突版本,最终数量与预期不符时要核对响应里的 version_conflicts

数据来源与参考

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