// 可以生成一个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逻辑感觉有点问题。