You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch使用doc_as_upsert时偶现document missing错误的触发场景

Elasticsearch 6.2.4 带doc_as_upsert的update请求偶发document_missing_exception的常见场景

结合你提交的请求特征(使用customerAlias索引别名、携带自定义routing参数、开启doc_as_upsert),常见触发场景如下:

  • 并发操作冲突:ES的doc_as_upsert执行逻辑为:先发起GET查询判断文档是否存在,存在则走更新逻辑,不存在则走插入逻辑。如果在GET查询完成、写入操作执行的间隙,有其他请求删除了同ID、同routing的文档,更新逻辑就会抛出文档不存在异常,高并发操作同ID文档时更容易触发。
  • 别名写规则变更:如果你的customerAlias别名绑定了多个索引且未固定is_write_index属性,或者请求处理瞬间后台正在执行别名切换操作(如索引重建、冷热数据迁移、滚动索引),会导致请求路由到错误的索引分片,该分片下不存在对应ID的文档,触发报错。
  • 路由匹配异常:你的请求携带了自定义routing值,如果对应ID的文档历史写入时使用了不同的routing值,或者节点计算分片时使用了过期的路由表(如分片刚完成迁移、主备切换还未同步路由信息到全集群节点),会导致请求找不到目标文档,触发异常。
  • 版本已知缺陷:Elasticsearch 6.2.4存在多个和doc_as_upsert相关的已知bug,当分片处于恢复状态、主分片刚完成切换的瞬间,携带routing参数的upsert请求会误判文档不存在,抛出该异常,这类问题在6.8及更高版本中已修复。
  • 同批次bulk请求顺序冲突:如果同一个bulk请求内,同一个ID的操作顺序为「先执行删除/其他导致文档不存在的操作,后执行当前update操作」,ES按顺序执行bulk内的请求时,update操作就会返回文档不存在的错误。

临时规避方案:可以在update请求参数中添加retry_on_conflict: 3,让ES在遇到冲突时自动重试最多3次,可大幅降低该偶发异常的出现概率。

内容的提问来源于stack exchange,提问作者expez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:36:05