mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Elasticsearch: Support extended stats and percentiles in terms order by (#28910)
Adds support to the terms aggregation for ordering by percentiles and extended stats. Closes #5148 Co-authored-by: Giordano Ricci <grdnricci@gmail.com> Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
This commit is contained in:
@@ -12,6 +12,7 @@ import {
|
||||
} from './components/QueryEditor/MetricAggregationsEditor/aggregations';
|
||||
import { defaultBucketAgg, defaultMetricAgg, findMetricById } from './query_def';
|
||||
import { ElasticsearchQuery } from './types';
|
||||
import { convertOrderByToMetricId } from './utils';
|
||||
|
||||
export class ElasticQueryBuilder {
|
||||
timeField: string;
|
||||
@@ -34,7 +35,6 @@ export class ElasticQueryBuilder {
|
||||
}
|
||||
|
||||
buildTermsAgg(aggDef: Terms, queryNode: { terms?: any; aggs?: any }, target: ElasticsearchQuery) {
|
||||
let metricRef;
|
||||
queryNode.terms = { field: aggDef.field };
|
||||
|
||||
if (!aggDef.settings) {
|
||||
@@ -54,14 +54,17 @@ export class ElasticQueryBuilder {
|
||||
}
|
||||
|
||||
// if metric ref, look it up and add it to this agg level
|
||||
metricRef = parseInt(aggDef.settings.orderBy, 10);
|
||||
if (!isNaN(metricRef)) {
|
||||
const metricId = convertOrderByToMetricId(aggDef.settings.orderBy);
|
||||
if (metricId) {
|
||||
for (let metric of target.metrics || []) {
|
||||
if (metric.id === aggDef.settings.orderBy) {
|
||||
queryNode.aggs = {};
|
||||
queryNode.aggs[metric.id] = {};
|
||||
if (isMetricAggregationWithField(metric)) {
|
||||
queryNode.aggs[metric.id][metric.type] = { field: metric.field };
|
||||
if (metric.id === metricId) {
|
||||
if (metric.type === 'count') {
|
||||
queryNode.terms.order = { _count: aggDef.settings.order };
|
||||
} else if (isMetricAggregationWithField(metric)) {
|
||||
queryNode.aggs = {};
|
||||
queryNode.aggs[metric.id] = {
|
||||
[metric.type]: { field: metric.field },
|
||||
};
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user