Update API
editUpdate API
editYou can either create an UpdateRequest
and send it to the client:
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();
Or you can use prepareUpdate()
method:
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();
Your script. It could also be a locally stored script name.
In that case, you’ll need to use |
|
Document which will be merged to the existing one. |
Note that you can’t provide both script
and doc
.
Update by script
editThe update API allows to update a document based on a script provided:
UpdateRequest updateRequest = new UpdateRequest("ttl", "doc", "1") .script(new Script("ctx._source.gender = \"male\"")); client.update(updateRequest).get();
Update by merging documents
editThe update API also support passing a partial document, which will be merged into the existing document (simple recursive merge, inner merging of objects, replacing core "keys/values" and arrays). For example:
UpdateRequest updateRequest = new UpdateRequest("index", "type", "1") .doc(jsonBuilder() .startObject() .field("gender", "male") .endObject()); client.update(updateRequest).get();
Upsert
editThere is also support for upsert
. If the document does not exist, the content of the upsert
element will be used to index the fresh 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();
If the document index/type/1
already exists, we will have after this operation a document like:
If it does not exist, we will have a new document:
{ "name" : "Joe Smith", "gender": "male" }