Elasticsearch 批量操作冲突?试试这 2 种优化技巧

背景

使用 _update_by_query 批量更新或者 _delete_by_query 批量删除,刚好有个 _bulk 批量写入,并且 _bulk 的执行更快,导致批量更新或者批量删除的版本比写入的版本要低,造成版本冲突报错。

方案

以下提供两种方式避免版本冲突:一是使用 version=版本号&version_type=external 外部控制,二是 if_seq_noif_primary_term 参数控制。

基于 external 外部模式

将 version 的控制权交由客户端管理。

例如,更新 my_index 索引。

json 复制代码
PUT my_index/_doc/233?version=2&version_type=external

当给定的 version=2,大于当前版本 version=1,执行更新或索引操作成功。

使用 if_seq_noif_primary_term 参数控制

在更新索引之前先查询 if_seq_noif_primary_term 这两个参数,然后传入更新指令。

例如,更新 my_index 索引之前先查询。

json 复制代码
GET my_index/_doc/233

返回结果。

json 复制代码
{
  "_index": "my_index",
  "_id": "233",
  "_version": 1,
  "_seq_no":0, 
  "_primary_term":1
}

将获取的 _seq_no_primary_term 传入更新指令。

json 复制代码
PUT my_index/_doc/233?if_seq_no=0&if_primary_term=1

执行成功。

相关推荐
GeminiJM3 小时前
Elasticsearch数据迁移方案深度对比:三种方法的优劣分析
大数据·elasticsearch·jenkins
Elastic 中国社区官方博客10 小时前
将 agents 连接到 Elasticsearch 使用模型上下文协议 - docker
大数据·数据库·人工智能·elasticsearch·搜索引擎·docker·ai
Elasticsearch12 小时前
使用 ES|QL COMPLETION + 一个 LLM 在 5 分钟内编写一个 Chuck Norris 事实生成器
elasticsearch
孫治AllenSun14 小时前
【ElasticSearch】客户端选择
大数据·elasticsearch·jenkins
科技热点圈16 小时前
切入高潜市场,抢占行业先机!ES SHOW 2025展位预订火爆,10月28-30日共启增长新蓝海
大数据·elasticsearch·搜索引擎
3Cloudream1 天前
互联网大厂Java面试深度解析:从基础到微服务云原生的全场景模拟
java·spring boot·redis·elasticsearch·微服务·kafka·电商架构
Elasticsearch1 天前
将 agents 连接到 Elasticsearch 使用模型上下文协议 - docker
elasticsearch
_風箏1 天前
SpringBoot【ElasticSearch集成 02】Java HTTP Rest client for ElasticSearch Jest 客户端集成
java·后端·elasticsearch
坐吃山猪1 天前
ES03-常用API
elasticsearch·es
Elasticsearch2 天前
探索 Vertex AI 与 Elasticsearch
elasticsearch