elasticsearch中的upsert

      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();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值