| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 | [[java-update-api]]== Update APIYou 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 scriptThe 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 documentsThe update API also support passing a partial document, which will be merged into the existing document (simplerecursive 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]]=== UpsertThere 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 addedIf 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 requestIf it does not exist, we will have a new document:[source,js]--------------------------------------------------{    "name" : "Joe Smith",    "gender": "male"}--------------------------------------------------
 |