|
@@ -0,0 +1,86 @@
|
|
|
+[[painless-bucket-script-agg-context]]
|
|
|
+=== Bucket script aggregation context
|
|
|
+
|
|
|
+Use a Painless script in an
|
|
|
+{ref}/search-aggregations-pipeline-bucket-script-aggregation.html[`bucket_script` pipeline aggregation]
|
|
|
+to calculate a value as a result in a bucket.
|
|
|
+
|
|
|
+==== 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
|
|
|
+
|
|
|
+numeric::
|
|
|
+ The calculated value as the result.
|
|
|
+
|
|
|
+==== API
|
|
|
+
|
|
|
+The standard <<painless-api-reference, Painless API>> is available.
|
|
|
+
|
|
|
+==== Example
|
|
|
+
|
|
|
+To run this example, first follow the steps in <<painless-context-examples, context examples>>.
|
|
|
+
|
|
|
+The painless context in a `bucket_script` 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.
|
|
|
+
|
|
|
+This example takes the values from a min and max aggregation, calculates the difference,
|
|
|
+and adds the user-specified base_cost to the result:
|
|
|
+
|
|
|
+[source,Painless]
|
|
|
+--------------------------------------------------
|
|
|
+(params.max - params.min) + params.base_cost
|
|
|
+--------------------------------------------------
|
|
|
+
|
|
|
+Note that the values are extracted from the `params` map. In context, the aggregation looks like this:
|
|
|
+
|
|
|
+[source,js]
|
|
|
+--------------------------------------------------
|
|
|
+GET /seats/_search
|
|
|
+{
|
|
|
+ "size": 0,
|
|
|
+ "aggs": {
|
|
|
+ "theatres": {
|
|
|
+ "terms": {
|
|
|
+ "field": "theatre",
|
|
|
+ "size": 10
|
|
|
+ },
|
|
|
+ "aggs": {
|
|
|
+ "min_cost": {
|
|
|
+ "min": {
|
|
|
+ "field": "cost"
|
|
|
+ }
|
|
|
+ },
|
|
|
+ "max_cost": {
|
|
|
+ "max": {
|
|
|
+ "field": "cost"
|
|
|
+ }
|
|
|
+ },
|
|
|
+ "spread_plus_base": {
|
|
|
+ "bucket_script": {
|
|
|
+ "buckets_path": { <1>
|
|
|
+ "min": "min_cost",
|
|
|
+ "max": "max_cost"
|
|
|
+ },
|
|
|
+ "script": {
|
|
|
+ "params": {
|
|
|
+ "base_cost": 5 <2>
|
|
|
+ },
|
|
|
+ "source": "(params.max - params.min) + params.base_cost"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+--------------------------------------------------
|
|
|
+// CONSOLE
|
|
|
+// TEST[setup:seats]
|
|
|
+<1> The `buckets_path` points to two aggregations (`min_cost`, `max_cost`) and adds `min`/`max` variables
|
|
|
+to the `params` map
|
|
|
+<2> The user-specified `base_cost` is also added to the script's `params` map
|