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
Follow me
Latest posts by Rajesh Kumar (see all)
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x