diff --git a/public/app/plugins/datasource/elasticsearch/bucketAgg.js b/public/app/plugins/datasource/elasticsearch/bucketAgg.js
index d96e9ad8090..32021f0ba42 100644
--- a/public/app/plugins/datasource/elasticsearch/bucketAgg.js
+++ b/public/app/plugins/datasource/elasticsearch/bucketAgg.js
@@ -80,6 +80,15 @@ function (angular, _, queryDef) {
break;
}
case 'filters': {
+ settings.filters = settings.filters || [{query: '*'}];
+ settingsLinkText = _.reduce(settings.filters, function(memo, value, index) {
+ memo += 'Q' + (index + 1) + ' = ' + value.query + ' ';
+ return memo;
+ }, '');
+ if (settingsLinkText.length > 50) {
+ settingsLinkText = settingsLinkText.substr(0, 50) + "...";
+ }
+ settingsLinkText = 'Filter Queries (' + settings.filters.length + ')';
break;
}
case 'date_histogram': {
@@ -94,6 +103,14 @@ function (angular, _, queryDef) {
return true;
};
+ $scope.addFiltersQuery = function() {
+ $scope.agg.settings.filters.push({query: '*'});
+ };
+
+ $scope.removeFiltersQuery = function(filter) {
+ $scope.agg.settings.filters = _.without($scope.agg.settings.filters, filter);
+ };
+
$scope.toggleOptions = function() {
$scope.showOptions = !$scope.showOptions;
$scope.updateOrderByOptions();
diff --git a/public/app/plugins/datasource/elasticsearch/partials/bucketAgg.html b/public/app/plugins/datasource/elasticsearch/partials/bucketAgg.html
index 2d7349f295a..b783b3c2efc 100644
--- a/public/app/plugins/datasource/elasticsearch/partials/bucketAgg.html
+++ b/public/app/plugins/datasource/elasticsearch/partials/bucketAgg.html
@@ -7,11 +7,11 @@
-
+
-
-
+
+
{{settingsLinkText}}
@@ -78,6 +78,27 @@
+
+
diff --git a/public/app/plugins/datasource/elasticsearch/queryBuilder.js b/public/app/plugins/datasource/elasticsearch/queryBuilder.js
index f1d1998e51d..f303c93952c 100644
--- a/public/app/plugins/datasource/elasticsearch/queryBuilder.js
+++ b/public/app/plugins/datasource/elasticsearch/queryBuilder.js
@@ -54,19 +54,15 @@ function (angular) {
}
};
- ElasticQueryBuilder.prototype.getFiltersAgg = function(target) {
+ ElasticQueryBuilder.prototype.getFiltersAgg = function(aggDef) {
var filterObj = {};
- for (var i = 0; i < target.bucketAggs.length; i++) {
- var aggDef = target.bucketAggs[i];
- if (aggDef.type !== 'filters') {
- continue;
- }
-
- filterObj[aggDef.query] = {
+ for (var i = 0; i < aggDef.settings.filters.length; i++) {
+ var query = aggDef.settings.filters[i].query;
+ filterObj[query] = {
query: {
query_string: {
- query: aggDef.query,
+ query: query,
analyze_wildcard: true
}
}
@@ -81,7 +77,7 @@ function (angular) {
return angular.fromJson(target.rawQuery);
}
- var i, nestedAggs, metric, filtersHandled;
+ var i, nestedAggs, metric;
var query = {
"size": 0,
"query": {
@@ -118,12 +114,7 @@ function (angular) {
break;
}
case 'filters': {
- // skip filters if we already processed them
- if (filtersHandled) {
- continue;
- }
- esAgg["filters"] = {filters: this.getFiltersAgg(target)};
- filtersHandled = true;
+ esAgg["filters"] = {filters: this.getFiltersAgg(aggDef)};
break;
}
case 'terms': {
diff --git a/public/test/specs/elasticsearch-querybuilder-specs.js b/public/test/specs/elasticsearch-querybuilder-specs.js
index f80b29f4021..467d3706e03 100644
--- a/public/test/specs/elasticsearch-querybuilder-specs.js
+++ b/public/test/specs/elasticsearch-querybuilder-specs.js
@@ -100,8 +100,16 @@ define([
metrics: [{type: 'count', id: '1'}],
timeField: '@timestamp',
bucketAggs: [
- {type: 'filters', query: '@metric:cpu', id: '2'},
- {type: 'filters', query: '@metric:logins.count', id: '3' },
+ {
+ id: '2',
+ type: 'filters',
+ settings: {
+ filters: [
+ {query: '@metric:cpu' },
+ {query: '@metric:logins.count' },
+ ]
+ }
+ },
{type: 'date_histogram', field: '@timestamp', id: '4'}
],
});
diff --git a/public/test/specs/elasticsearch-response-specs.js b/public/test/specs/elasticsearch-response-specs.js
index 4001327aa5e..fe465df3129 100644
--- a/public/test/specs/elasticsearch-response-specs.js
+++ b/public/test/specs/elasticsearch-response-specs.js
@@ -359,8 +359,16 @@ define([
refId: 'A',
metrics: [{type: 'count', id: '1'}],
bucketAggs: [
- {type: 'filters', query: '@metric:cpu', id: '2'},
- {type: 'filters', query: '@metric:logins.count', id: '5'},
+ {
+ id: '2',
+ type: 'filters',
+ settings: {
+ filters: [
+ {query: '@metric:cpu' },
+ {query: '@metric:logins.count' },
+ ]
+ }
+ },
{type: 'date_histogram', field: '@timestamp', id: '3'}
],
}];