mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-07 13:38:49 +00:00
This change unifies the way scripts and templates are specified for all instances in the codebase. It builds on the Script class added previously and adds request building and parsing support as well as the ability to transfer script objects between nodes. It also adds a Template class which aims to provide the same functionality for template APIs Closes #11091
119 lines
3.6 KiB
Plaintext
119 lines
3.6 KiB
Plaintext
[[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"
|
|
}
|
|
--------------------------------------------------
|
|
|
|
|
|
|
|
|