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

执行成功。

相关推荐
Elastic 中国社区官方博客1 天前
跟踪资金流向:使用 ES|QL 和跨集群搜索追踪洗钱网络
大数据·人工智能·安全·elasticsearch·搜索引擎·金融·全文检索
偏爱自由 !1 天前
5:IDEA中git的使用--git fetch 和 git pull 和解决冲突
git·elasticsearch·intellij-idea
agent8971 天前
Elasticsearch 慢查询排查:从 Mapping、分片、分页到聚合优化
大数据·elasticsearch·django
又抓住你了1 天前
ElasticSearch_基础数据管理详解
大数据·elasticsearch
星空1 天前
git指令
大数据·elasticsearch·搜索引擎
阿拉斯攀登2 天前
向量数据库选型:Milvus vs Chroma vs Elasticsearch
数据库·elasticsearch·milvus·知识库·rag·个人知识库
江畔柳前堤2 天前
第15章:docker故障排查与面试题
大数据·运维·git·elasticsearch·docker·容器·eureka
江畔柳前堤2 天前
第07章:Docker 网络模型
运维·网络·git·elasticsearch·docker·容器·架构
Elasticsearch3 天前
深入解析 simdvec:Elasticsearch 如何利用神经网络和视频编解码 CPU 指令实现向量搜索
elasticsearch
Elasticsearch4 天前
一条命令。自然语言。你的 Elasticsearch 数据,直接进入终端
elasticsearch