elasticsearch Java API 之Update API

// 可以生成一个updateRequest对象来进行更新
UpdateRequest updateRequest = new UpdateRequest();
updateRequest.index("index");//索引名称
updateRequest.type("type");//类型
updateRequest.id("1");//索引ID
updateRequest.doc(jsonBuilder()
        .startObject()
            .field("gender", "male")
        .endObject());//传入要修改的字段及值
client.update(updateRequest).get();

    或者使用 prepareUpdate方式,这种可能看起来比较简洁。

// 方式一,script,你可以使用本地存储的script,但是参数处应改为:ScriptService.ScriptType.FILE
client.prepareUpdate("ttl", "doc", "1")
        .setScript("ctx._source.gender = \"male\""  , ScriptService.ScriptType.INLINE)
        .get();
// 方式二,这种方式会将文档合并到存在的文档(1)中去。
client.prepareUpdate("ttl", "doc", "1")
        .setDoc(jsonBuilder()               
            .startObject()
                .field("gender", "male")
            .endObject())
        .get();

  注意:不能同时使用方式一和方式二。

使用script 更新

UpdateRequest updateRequest = new UpdateRequest("ttl", "doc", "1")
        .script("ctx._source.gender = \"male\"");
client.update(updateRequest).get();

通过合并文件更新

UpdateRequest updateRequest = new UpdateRequest("index", "type", "1")
        .doc(jsonBuilder()
            .startObject()
                .field("gender", "male")
            .endObject());
client.update(updateRequest).get();

Upsert方式

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("name", "Joe Dalton")
                .field("gender", "male")
            .endObject())
        .upsert(indexRequest);             
 client.update(updateRequest).get();

 如果文档原本不存在,那indexRequest就会被索引。那最后我们获取index/type/1的文档就是:

{
    "name"  : "Joe Smith",
    "gender": "male"        
}

 如果文档存在,那就会用到updateRequest,那最后我们获取index/type/1的文件就是:

{
    "name"  : "Joe Dalton",
    "gender": "male"        
}


 官网上的API逻辑感觉有点问题。



转载于:https://my.oschina.net/claireliu/blog/464503

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值