Update by query context

Use a Painless script in an update by query operation to add, modify, or delete fields within each of a set of documents collected as the result of query.

Variables

params (Map, read-only)
User-defined parameters passed in as part of the query.
ctx['_op'] (String)
The name of the operation.
ctx['_routing'] (String, read-only)
The value used to select a shard for document storage.
ctx['_index'] (String, read-only)
The name of the index.
ctx['_type'] (String, read-only)
The type of document within an index.
ctx['_id'] (int, read-only)
The unique document id.
ctx['_version'] (int, read-only)
The current version of the document.
ctx['_source'] (Map)
Contains extracted JSON in a Map and List structure for the fields existing in a stored document.

Side Effects

ctx['_op']
Use the default of index to update a document. Set to none to specify no operation or delete to delete the current document from the index.
ctx['_source']
Modify the values in the Map/List structure to add, modify, or delete the fields of a document.

Return

void
No expected return value.

API

The standard Painless API is available.

Example

To run this example, first follow the steps in context examples.

The following query finds all seats in a specific section that have not been sold and lowers the price by 2:

POST /seats/_update_by_query
{
    "query": {
        "bool": {
            "filter": [
            {
                "range": {
                    "row": {
                        "lte": 3
                    }
                }
            },
            {
                "match": {
                    "sold": false
                }
            }]
        }
    },
    "script": {
        "source": "ctx._source.cost -= params.discount",
        "lang": "painless",
        "params": {
            "discount": 2
        }
    }
}