Average bucket aggregation

edit

A sibling pipeline aggregation which calculates the mean value of a specified metric in a sibling aggregation. The specified metric must be numeric and the sibling aggregation must be a multi-bucket aggregation.

Syntax

edit
"avg_bucket": {
  "buckets_path": "sales_per_month>sales",
  "gap_policy": "skip",
  "format": "#,##0.00;(#,##0.00)"
}

Parameters

edit
buckets_path
(Required, string) Path to the buckets to average. For syntax, see buckets_path Syntax.
gap_policy
(Optional, string) Policy to apply when gaps are found in the data. For valid values, see Dealing with gaps in the data. Defaults to skip.
format
(Optional, string) DecimalFormat pattern for the output value. If specified, the formatted value is returned in the aggregation’s value_as_string property.

Response body

edit
value
(float) Mean average value for the metric specified in buckets_path.
value_as_string
(string) Formatted output value for the aggregation. This property is only provided if a format is specified in the request.

Example

edit

The following avg_monthly_sales aggregation uses avg_bucket to calculate average sales per month:

resp = client.search(
    size=0,
    aggs={
        "sales_per_month": {
            "date_histogram": {
                "field": "date",
                "calendar_interval": "month"
            },
            "aggs": {
                "sales": {
                    "sum": {
                        "field": "price"
                    }
                }
            }
        },
        "avg_monthly_sales": {
            "avg_bucket": {
                "buckets_path": "sales_per_month>sales",
                "gap_policy": "skip",
                "format": "#,##0.00;(#,##0.00)"
            }
        }
    },
)
print(resp)
const response = await client.search({
  size: 0,
  aggs: {
    sales_per_month: {
      date_histogram: {
        field: "date",
        calendar_interval: "month",
      },
      aggs: {
        sales: {
          sum: {
            field: "price",
          },
        },
      },
    },
    avg_monthly_sales: {
      avg_bucket: {
        buckets_path: "sales_per_month>sales",
        gap_policy: "skip",
        format: "#,##0.00;(#,##0.00)",
      },
    },
  },
});
console.log(response);
POST _search
{
  "size": 0,
  "aggs": {
    "sales_per_month": {
      "date_histogram": {
        "field": "date",
        "calendar_interval": "month"
      },
      "aggs": {
        "sales": {
          "sum": {
            "field": "price"
          }
        }
      }
    },
    "avg_monthly_sales": {
// tag::avg-bucket-agg-syntax[]               
      "avg_bucket": {
        "buckets_path": "sales_per_month>sales",
        "gap_policy": "skip",
        "format": "#,##0.00;(#,##0.00)"
      }
// end::avg-bucket-agg-syntax[]               
    }
  }
}

Start of the avg_bucket configuration. Comment is not part of the example.

End of the avg_bucket configuration. Comment is not part of the example.

The request returns the following response:

{
  "took": 11,
  "timed_out": false,
  "_shards": ...,
  "hits": ...,
  "aggregations": {
    "sales_per_month": {
      "buckets": [
        {
          "key_as_string": "2015/01/01 00:00:00",
          "key": 1420070400000,
          "doc_count": 3,
          "sales": {
            "value": 550.0
          }
        },
        {
          "key_as_string": "2015/02/01 00:00:00",
          "key": 1422748800000,
          "doc_count": 2,
          "sales": {
            "value": 60.0
          }
        },
        {
          "key_as_string": "2015/03/01 00:00:00",
          "key": 1425168000000,
          "doc_count": 2,
          "sales": {
            "value": 375.0
          }
        }
      ]
    },
    "avg_monthly_sales": {
      "value": 328.33333333333333,
      "value_as_string": "328.33"
    }
  }
}