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

执行成功。

相关推荐
Elasticsearch11 小时前
一次编辑,更新所有仪表板:使用 Terraform 大规模管理 Kibana 可观测性配置
elasticsearch
Elasticsearch11 小时前
足够接近就是足够快:ES|QL Fast 模式如何让 Kibana 仪表板速度提升最高 100 倍
elasticsearch
Elasticsearch12 小时前
一分钟内从提示词生成仪表板,成本降低 5 倍:Kibana 中的 AI 仪表板和自定义 Vega-Lite 图表
elasticsearch
雾屿_Mistisle12 小时前
敏感文件泄露
大数据·elasticsearch·搜索引擎
Elasticsearch13 小时前
Elastic 9.5: Columnar 、 VectorDB 索引模式与自动校准,以及由 AI 驱动的告警分类整理
elasticsearch
晚安code13 小时前
一、Elasticsearch查询的 DSL 骨架:先把 JSON 看懂
elasticsearch
XS03010614 小时前
Git远程仓库实操笔记
笔记·git·elasticsearch
love530love14 小时前
Ubuntu系统通过Homebrew安装Lightpanda完整实战教程(含端口占用排坑)
大数据·linux·运维·人工智能·elasticsearch·搜索引擎
Elasticsearch1 天前
将 Embedding 模型加载到 Elasticsearch 中
elasticsearch
Elasticsearch1 天前
使用 Elasticsearch open inference API 对 OpenAI chat completions 进行支持
elasticsearch