Understanding the Update API in Elasticsearch

The update API allows to update(also allows to delete, or ignore the operation). a document based on a script provided.

  • The operation gets the document from the index, runs the script (with optional script language and parameters), and index back the result.
  • The _source field needs to be enabled for this feature to work.

For example, let’s index a simple doc:

curl -X PUT "localhost:9200/test/_doc/1" -H 'Content-Type: application/json' -d'
{
    "counter" : 1,
    "tags" : ["red"]
}
'

Now, we can execute a script that would increment the counter:

curl -X POST "localhost:9200/test/_doc/1/_update" -H 'Content-Type: application/json' -d'
{
    "script" : {
        "source": "ctx._source.counter += params.count",
        "lang": "painless",
        "params" : {
            "count" : 4
        }
    }
}
'

We can add a tag to the list of tags (note, if the tag exists, it will still add it, since its a list):

curl -X POST "localhost:9200/test/_doc/1/_update" -H 'Content-Type: application/json' -d'
{
    "script" : {
        "source": "ctx._source.tags.add(params.tag)",
        "lang": "painless",
        "params" : {
            "tag" : "blue"
        }
    }
}
'

ng>We can also add a new field to the document:

curl -X POST "localhost:9200/test/_doc/1/_update" -H 'Content-Type: application/json' -d'
{
    "script" : "ctx._source.new_field = \u0027value_of_new_field\u0027"
}
'

We can also add a new field to the document:

curl -X POST "localhost:9200/test/_doc/1/_update" -H 'Content-Type: application/json' -d'
{
    "script" : "ctx._source.new_field = \u0027value_of_new_field\u0027"
}
'

Or remove a field from the document:

curl -X POST "localhost:9200/test/_doc/1/_update" -H 'Content-Type: application/json' -d'
{
    "script" : "ctx._source.remove(\u0027new_field\u0027)"
}
'

Reference
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html

ctx is a special variable that allows you to access the source of the object that you want to update. The ctx._source is a writable version of the source.
NOTE: You can modify this document in the script and the modified source will be persisted as the new version of the document.

Rajesh Kumar