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.