Elasticsearch干货(二):index、create、update区别 - 桃花惜春风 - CSDN博客

版权声明:本博客所有文章均为原创,如有转载,请注明原文地址,谢谢!----桃花惜春风 https://blog.csdn.net/xiaoyu_BD/article/details/81914567

关于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,但是对于已有的文档,不会创建新文档,即插入失败。

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


Original url: Access
Created at: 2018-11-27 21:18:19
Category: default
Tags: none

请先后发表评论
  • 最新评论
  • 总共0条评论