Bucket selector aggregation contextedit

Use a Painless script in an bucket_selector aggregation to determine if a bucket should be retained or filtered out.

Variablesedit

params (Map, read-only)
User-defined parameters passed in as part of the query. The parameters include values defined as part of the buckets_path.

Returnedit

boolean
True if the bucket should be retained, false if the bucket should be filtered out.

APIedit

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

The painless context in a bucket_selector aggregation provides a params map. This map contains both user-specified custom values, as well as the values from other aggregations specified in the buckets_path property.

Unlike some other aggregation contexts, the bucket_selector context must return a boolean true or false.

This example finds the max of each bucket, adds a user-specified base_cost, and retains all of the buckets that are greater than 10.

params.max + params.base_cost > 10

Note that the values are extracted from the params map. The script is in the form of an expression that returns true or false. In context, the aggregation looks like this:

GET /seats/_search
{
  "size": 0,
  "aggs": {
    "theatres": {
      "terms": {
        "field": "theatre",
        "size": 10
      },
      "aggs": {
        "max_cost": {
          "max": {
            "field": "cost"
          }
        },
        "filtering_agg": {
          "bucket_selector": {
            "buckets_path": { 
              "max": "max_cost"
            },
            "script": {
              "params": {
                "base_cost": 5 
              },
              "source": "params.max + params.base_cost > 10"
            }
          }
        }
      }
    }
  }
}

The buckets_path points to the max aggregations (max_cost) and adds max variables to the params map

The user-specified base_cost is also added to the params map