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

背景

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

方案

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

基于 external 外部模式

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

例如,更新 my_index 索引。

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

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

使用 if_seq_no 和 if_primary_term 参数控制

在更新索引之前先查询 if_seq_no 和 if_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

执行成功。

相关推荐
yukai080085 小时前
【203篇系列】056 我的Agent系统
大数据·elasticsearch·搜索引擎
IT大白鼠5 小时前
搜索系列 · 第 08 篇——面试收官:高频题与全景总结
elasticsearch·面试·nosql
光影少年14 小时前
langchain与langgraph区别以及学习路线
elasticsearch·langchain·llm
Elasticsearch15 小时前
错误最多的服务运行正常:使用 ES|QL 从日志进行根因分析
elasticsearch
Elasticsearch15 小时前
将你自己的密钥用于现有 Elastic Cloud 部署
elasticsearch
IT大白鼠1 天前
搜索系列 · 第 06 篇——避坑汇总:经典生产问题
elasticsearch·nosql
IT大白鼠1 天前
搜索系列 · 第 07 篇——调优实战:写入、查询与监控
elasticsearch·nosql
Elasticsearch2 天前
检查 100 个候选项,而不是 1000 万个文档:更快速的 Elasticsearch kNN 过滤
elasticsearch
Elasticsearch2 天前
当 AI agent 群集出现时,银行能跟上吗?
elasticsearch
Sayai2 天前
Elasticsearch 日志检索 DSL 实战:时间范围查询、字段去重、分钟级统计与最新日志获取
大数据·运维·elasticsearch·搜索引擎·日志分析