Elasticsearch干货(二):index、create、update区别

关于index/create/update的详细流程参考:Elasticsearch原理(三):写入流程

index、create、update都是可以实现插入功能,但实现的原理并不相同。

index/create

第一步判断是确定插入的文档是否指定id,如果没有指定id,系统会默认生成一个唯一id。这种情况下,不管index还是create会直接add文档。如果用户指定了id,那么就会走update(这里的update指的是Lucene,并非Elasticsearch中的update),update成本比add要高。

第二步判断,会检查版本号是否冲突,只有正确的版本号才会执行插入,否则会插入失败。通过源码分析可以了解到,获取版本号的这个过程,是通过id来get文档,但无论是index还是create都不会get整个doc的全部内容,只是get出了版号。这也从一定程度上减少了系统开销。

update

由于Lucene中的update其实就是覆盖替换,并不支持针对特定Field进行修改,Elasticsearch中的update为了实现针对特定字段修改,在Lucene的基础上做了一些改动。

每次update都会调用 InternalEngine 中的get方法,来获取整个文档信息,从而实现针对特定字段进行修改,这也就导致了每次更新要获取一遍原始文档,性能上会有很大影响。所以根据使用场景,有时候使用index会比update好很多。

index和create区别

index时会检查_version。如果插入时没有指定_version,那对于已有的doc,_version会递增,并对文档覆盖。插入时如果指定_version,如果与已有的文档_version不相等,则插入失败,如果相等则覆盖,_version递增。

create时也会检查_version,但是对于已有的文档,不会创建新文档,即插入失败。


更多文章关注公众号
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210325093921176.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW95dV9CRA==,size_16,color_FFFFFF,t_70

更多:Elasticsearch深入理解专栏
——————————————————————————————————
作者:桃花惜春风
转载请标明出处,原文地址:
https://blog.csdn.net/xiaoyu_BD/article/details/81914567
如果感觉本文对您有帮助,请留下您的赞,您的支持是我坚持写作最大的动力,谢谢!

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值