painless-update-by-query-context.md 2.6 KB


mapped_pages:

Update by query context [painless-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['_id'] (String, 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
    }
  }
}