WARNING: The 2.x versions of Elasticsearch have passed their EOL dates. If you are running a 2.x version, we strongly advise you to upgrade.
This documentation is no longer maintained and may be removed. For the latest information, see the current Elasticsearch documentation.
Sorting by a Metricedit
Often, you’ll find yourself wanting to sort based on a metric’s calculated value. For our car sales analytics dashboard, we may want to build a bar chart of sales by car color, but order the bars by the average price, ascending.
We can do this by adding a metric to our bucket, and then referencing that
metric from the order
parameter:
GET /cars/transactions/_search { "size" : 0, "aggs" : { "colors" : { "terms" : { "field" : "color", "order": { "avg_price" : "asc" } }, "aggs": { "avg_price": { "avg": {"field": "price"} } } } } }
The average price is calculated for each bucket. |
|
Then the buckets are ordered by the calculated average in ascending order. |
This lets you override the sort order with any metric, simply by referencing
the name of the metric. Some metrics, however, emit multiple values. The
extended_stats
metric is a good example: it provides half a dozen individual
metrics.
If you want to sort on a multivalue metric, you just need to use the dot-path to the metric of interest:
GET /cars/transactions/_search { "size" : 0, "aggs" : { "colors" : { "terms" : { "field" : "color", "order": { "stats.variance" : "asc" } }, "aggs": { "stats": { "extended_stats": {"field": "price"} } } } } }
In this example we are sorting on the variance of each bucket, so that colors with the least variance in price will appear before those that have more variance.