123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- [[java-update-api]]
- == Update API
- You can either create an `UpdateRequest` and send it to the client:
- [source,java]
- --------------------------------------------------
- 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:
- [source,java]
- --------------------------------------------------
- client.prepareUpdate("ttl", "doc", "1")
- .setScript(new Script("ctx._source.gender = \"male\"" <1> , ScriptService.ScriptType.INLINE, null, null))
- .get();
- client.prepareUpdate("ttl", "doc", "1")
- .setDoc(jsonBuilder() <2>
- .startObject()
- .field("gender", "male")
- .endObject())
- .get();
- --------------------------------------------------
- <1> Your script. It could also be a locally stored script name.
- In that case, you'll need to use `ScriptService.ScriptType.FILE`
- <2> Document which will be merged to the existing one.
- Note that you can't provide both `script` and `doc`.
- [[java-update-api-script]]
- === Update by script
- The update API allows to update a document based on a script provided:
- [source,java]
- --------------------------------------------------
- UpdateRequest updateRequest = new UpdateRequest("ttl", "doc", "1")
- .script(new Script("ctx._source.gender = \"male\""));
- client.update(updateRequest).get();
- --------------------------------------------------
- [[java-update-api-merge-docs]]
- === Update by merging documents
- The 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:
- [source,java]
- --------------------------------------------------
- UpdateRequest updateRequest = new UpdateRequest("index", "type", "1")
- .doc(jsonBuilder()
- .startObject()
- .field("gender", "male")
- .endObject());
- client.update(updateRequest).get();
- --------------------------------------------------
- [[java-update-api-upsert]]
- === Upsert
- There is also support for `upsert`. If the document does not already exists, the content of the `upsert`
- element will be used to index the fresh doc:
- [source,java]
- --------------------------------------------------
- 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); <1>
- client.update(updateRequest).get();
- --------------------------------------------------
- <1> If the document does not exist, the one in `indexRequest` will be added
- If the document `index/type/1` already exists, we will have after this operation a document like:
- [source,js]
- --------------------------------------------------
- {
- "name" : "Joe Dalton",
- "gender": "male" <1>
- }
- --------------------------------------------------
- <1> This field is added by the update request
- If it does not exist, we will have a new document:
- [source,js]
- --------------------------------------------------
- {
- "name" : "Joe Smith",
- "gender": "male"
- }
- --------------------------------------------------
|