ElasticSearch-更新与更新冲突,elasticsearch-冲突
在上一篇博客ElasticSearch-简介,对索引操作中知道,如果插入一条数据,该ID存在的情况下,文档将会覆盖旧的文档,然后重新索引整个文档。那么有没有办法使其部分更新,例如在某个请求时对计数器增加。
update请求最简单的一种形式是接收文档的一部分作为doc参数,它只是与现有的文档合并。对象被合并到一起,覆盖现有的字段,增加的新的字段。例如在张三的信息中增加score和favorite字段
curl -XPOST 'http://localhost:9200/grade3/class2/1/_update' -d '
{
"doc":{
"score":80,
"favorite":["music","football"]
}
}
'
此时,就完成了对张三的信息的更改,我们查询一下张三的信息,获得:
{
"_index" : "grade3",
"_type" : "class2",
"_id" : "1",
"_version" : 2,
"found" : true,
"_source" : {
"name":"张三",
"age":18,
"email":"xxx@163.com",
"score":80,
"favorite":["music","football"]
}
}
除了上面这种方法之外,ElasticSearch还提供了脚本来实现部分更新:
# 通过将本将张三的信息中score加1
curl -XPOST 'http://localhost:9200/grade3/class2/1/_update' -d '
{
"script":"ctx._source.score+=1"
}
'
更新冲突
在上一篇博客ElasticSearch-冲突处理,介绍了在覆盖更新时冲突的出现和解决,但它使用于覆盖更新情况,此时我们需要对文档部分更新,该如何解决这种冲突呢?
在updateAPI中,可以通过设置参数retry_on_conflict来自动完成,这个参数决定了update失败之后重试的次数,它的默认值为0。
curl -XPOST 'http://localhost:9200/grade3/class2/1/_update?retry_on_conflict=5' -d '
{
"script":"ctx._source.score+=1"
}
'
- retry_on_conflict:更新失败之后重试次数
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。