elasticsearch中的upsert

来源:互联网 发布:linux时间同步 chrony 编辑:程序博客网 时间:2024/06/05 15:53

      elasticsearch的更新功能是非常强大的,一直知道在update中有一个upsert功能,因为一直用不到也就没有去仔细看一下,最近,因为有业务可能要用到该功能,这里简单的说一下:

通过curl去更新数据如下:

curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{    "doc" : {        "name" : "new_name"    },    "upsert" : {        "counter" : 1    }}'
上面的例子就是实现_id为1的文档的更新操作,如果_id为1的文档存在,则去更新doc中的内容,如果不存在,则将upsert中的内容插入进去.这里需要注意,如果doc中要更新的字段,比如name不存在,则会将这个name数据插入进去.当然,如果配置了禁止动态生成mapping,则会失败.

java中的代码实现,如下:

IndexRequest indexRequest = new IndexRequest("index", "type", "1")        .source(jsonBuilder()            .startObject()                .field("name", "Joe Smith")                .field("gender", "male")            .endObject());UpdateRequest updateRequest = new UpdateRequest("index", "type", "1")        .doc(jsonBuilder()            .startObject()                .field("gender", "male")            .endObject())        .upsert(indexRequest);              client.update(updateRequest).get();

0 0
原创粉丝点击