实例语句
先看下方案例,我在名称为test4的索引中随意添加了一条数据,然后返回了一串添加成功的返回值,其他字段大家可能都知道其意思,但是在其中_version字段具有什么作用呢?
PUTtest4/_doc/3{ "name": "张三"} { "_index" : "test4", "_type" : "_doc", "_id" : "3", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1}
后面查询了一下具体的官方文档,我才了解到,原来每个文档都存在一个版本号用来保证并发情况下,可能出现覆盖更新的情况,为了规避这个问题,ElasticSearch添加了类似CAS的_version字段来对更新做判断,这也是CAS中ABA问题解决方案的具体实现,如果_version还是老版本的话,ElasticSearch会返回409的状态码阻止当前的更新,因为它会认为你已经不是最新的更新操作了.