mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* (elasticsearch): add nested agg (use bucket aggs). fixes #4693 * (elasticsearch): rebased after merge of #6043 refactored from #4527
This commit is contained in:
committed by
Torkel Ödegaard
parent
05952688c5
commit
8087af9c89
@@ -59,6 +59,33 @@ function (queryDef) {
|
||||
return queryNode;
|
||||
};
|
||||
|
||||
ElasticQueryBuilder.prototype.buildNestedAgg = function(aggDef, queryNode, target) {
|
||||
var metric, y;
|
||||
if (!aggDef.settings) {
|
||||
return queryNode;
|
||||
}
|
||||
var settings = aggDef.settings;
|
||||
queryNode.nested = {};
|
||||
queryNode.nested.path = settings.nested.path;
|
||||
|
||||
queryNode.aggs = {
|
||||
nested_aggs: {
|
||||
filter: {},
|
||||
aggs: {}
|
||||
}
|
||||
};
|
||||
queryNode.aggs.nested_aggs.filter.term = {};
|
||||
queryNode.aggs.nested_aggs.filter.term[settings.nested.term] = settings.nested.query;
|
||||
|
||||
queryNode.aggs.nested_aggs.aggs = {};
|
||||
for (y = 0; y < target.metrics.length; y++) {
|
||||
metric = target.metrics[y];
|
||||
queryNode.aggs.nested_aggs.aggs[metric.id] = {};
|
||||
queryNode.aggs.nested_aggs.aggs[metric.id][metric.type] = {field: metric.field};
|
||||
}
|
||||
return queryNode;
|
||||
};
|
||||
|
||||
ElasticQueryBuilder.prototype.getDateHistogramAgg = function(aggDef) {
|
||||
var esAgg = {};
|
||||
var settings = aggDef.settings || {};
|
||||
@@ -183,6 +210,7 @@ function (queryDef) {
|
||||
|
||||
nestedAggs = query;
|
||||
|
||||
var foundNested = false;
|
||||
for (i = 0; i < target.bucketAggs.length; i++) {
|
||||
var aggDef = target.bucketAggs[i];
|
||||
var esAgg = {};
|
||||
@@ -204,6 +232,10 @@ function (queryDef) {
|
||||
esAgg['geohash_grid'] = {field: aggDef.field, precision: aggDef.settings.precision};
|
||||
break;
|
||||
}
|
||||
case 'nested': {
|
||||
foundNested = true;
|
||||
this.buildNestedAgg(aggDef, esAgg, target);
|
||||
}
|
||||
}
|
||||
|
||||
nestedAggs.aggs = nestedAggs.aggs || {};
|
||||
@@ -211,35 +243,37 @@ function (queryDef) {
|
||||
nestedAggs = esAgg;
|
||||
}
|
||||
|
||||
nestedAggs.aggs = {};
|
||||
if (!foundNested) {
|
||||
nestedAggs.aggs = {};
|
||||
|
||||
for (i = 0; i < target.metrics.length; i++) {
|
||||
metric = target.metrics[i];
|
||||
if (metric.type === 'count') {
|
||||
continue;
|
||||
}
|
||||
|
||||
var aggField = {};
|
||||
var metricAgg = null;
|
||||
|
||||
if (queryDef.isPipelineAgg(metric.type)) {
|
||||
if (metric.pipelineAgg && /^\d*$/.test(metric.pipelineAgg)) {
|
||||
metricAgg = { buckets_path: metric.pipelineAgg };
|
||||
} else {
|
||||
for (i = 0; i < target.metrics.length; i++) {
|
||||
metric = target.metrics[i];
|
||||
if (metric.type === 'count') {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
metricAgg = {field: metric.field};
|
||||
}
|
||||
|
||||
for (var prop in metric.settings) {
|
||||
if (metric.settings.hasOwnProperty(prop) && metric.settings[prop] !== null) {
|
||||
metricAgg[prop] = metric.settings[prop];
|
||||
var aggField = {};
|
||||
var metricAgg = null;
|
||||
|
||||
if (queryDef.isPipelineAgg(metric.type)) {
|
||||
if (metric.pipelineAgg && /^\d*$/.test(metric.pipelineAgg)) {
|
||||
metricAgg = { buckets_path: metric.pipelineAgg };
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
metricAgg = {field: metric.field};
|
||||
}
|
||||
}
|
||||
|
||||
aggField[metric.type] = metricAgg;
|
||||
nestedAggs.aggs[metric.id] = aggField;
|
||||
for (var prop in metric.settings) {
|
||||
if (metric.settings.hasOwnProperty(prop) && metric.settings[prop] !== null) {
|
||||
metricAgg[prop] = metric.settings[prop];
|
||||
}
|
||||
}
|
||||
|
||||
aggField[metric.type] = metricAgg;
|
||||
nestedAggs.aggs[metric.id] = aggField;
|
||||
}
|
||||
}
|
||||
|
||||
return query;
|
||||
|
||||
Reference in New Issue
Block a user