ElasticSearch6.X版本Java Api中文详解(四)之Update API解析、更新操作

《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"
}
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注