ElasticSearch6.X版本Java Api中文详解(四)之Update API解析

你可以创建一个UpdateRequest并将它发送给客户端:

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

或者您可以使用prepareUpdate()方法:

client.prepareUpdate("ttl", "doc", "1")
        .setScript(new Script("ctx._source.gender = \"male\""  , ScriptService.ScriptType.INLINE, null, null))
        .get();

client.prepareUpdate("ttl", "doc", "1")
        .setDoc(jsonBuilder()               
            .startObject()
                .field("gender", "male")
            .endObject())
        .get();

请注意,您不能同时提供脚本和doc。


Update By Script

更新API允许根据提供的脚本更新文档:

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

更新API还支持传递一个部分文档,它将被合并到现有的文档中(简单的递归合并,对象的内部合并,替换核心的“键/值”和数组)。例如:

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

Upsert

也有对upsert的支持。如果文档不存在,upsert元素的内容将被用来索引新鲜的doc:

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

如果文件index/type/1已经存在,我们将在这个操作之后有一个文档,如:

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

如果它不存在,我们将会有一个新的文档:

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

猜你喜欢

转载自blog.csdn.net/zhou_shaowei/article/details/80078877
今日推荐