[[painless-bucket-selector-agg-context]] === Bucket selector aggregation context Use a Painless script in an {ref}/search-aggregations-pipeline-bucket-selector-aggregation.html[`bucket_selector` aggregation] to determine if a bucket should be retained or filtered out. ==== Variables `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`. ==== Return boolean:: True if the bucket should be retained, false if the bucket should be filtered out. ==== API To run this example, first follow the steps in <>. 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`. [source,Painless] -------------------------------------------------- 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: [source,js] -------------------------------------------------- GET /seats/_search { "size": 0, "aggs": { "theatres": { "terms": { "field": "theatre", "size": 10 }, "aggs": { "max_cost": { "max": { "field": "cost" } }, "filtering_agg": { "bucket_selector": { "buckets_path": { <1> "max": "max_cost" }, "script": { "params": { "base_cost": 5 <2> }, "source": "params.max + params.base_cost > 10" } } } } } } } -------------------------------------------------- // CONSOLE // TEST[setup:seats] <1> The `buckets_path` points to the max aggregations (`max_cost`) and adds `max` variables to the `params` map <2> The user-specified `base_cost` is also added to the `params` map