Elasticsearch系列---增量更新原理及优势

本文深入探讨Elasticsearch的增量更新机制,包括其原理、分片间的交互过程以及增量更新的优点。通过示例介绍了如何使用脚本实现灵活的增量更新逻辑,强调了脚本的复用性和注意事项。最后,提到了适用于缺失文档的upsert语法,以应对更新时可能遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概要

本篇主要介绍增量更新(partial update,也叫局部更新)的核心原理,介绍6.3.1版本的Elasticsearch脚本使用实例和增量更新的优势。

增量更新过程与原理

简单回顾

前文我们有简单介绍过增量的语法,简单回顾一下请求示例:

POST /music/children/1/_update
{
   
  "doc": {
   
    "length": "76"
  }
}

一般从客户端到Elasticsearch,完整的应用请求流程基本是这样的:

  • 客户端先发起GET请求,获取到document信息,展现到前端页面上,供用户进行编辑。
  • 用户编辑完数据后,点击提交。
  • 后台系统处理修改后的数据,并组装好完整的document报文。
  • 发送PUT请求到ES,进行全量替换。
  • ES将老的document标记为deleted,然后重新创建一个新的document。

Elasticsearch的document是基于不可变模式设计的,所有的document更新,其实都创建了一个新的document出来,再把老的document标记为deleted,增量更新也不例外,只是GET全量document数据,整合新的document,替换老的document这三步操作全在一个shard里完成,毫秒级完成。

增量更新分片之间的交互

12

增量更新document的步骤:

  1. Java客户端向ES集群发送更新请求。
  2. Coodinate Node收到请求,但该document不在当前node上,它将请求转发到Node2节点的P0 shard上。
  3. Node 2检索document,修改_source下的JSON,并且重新索引该document,如果有其他线程修改过该document,有版本冲突的话,会重新尝试更新document,最大重试retry_on_conflict次,超出重试次数后放弃。
  4. 如果步骤3操作成功,Node2会将该document的完整内容异步转发到Node1和Node3的replica shard,重新建立索引。一旦所有replica都返回成功,Node2返回成功消息给Coodinate Node。
  5. Coodinate Node响应更新成功消息给客户端,此时ES集群内primary shard和replica shard都已经更新完成。
注意几点:
    <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值