From 4249bdc6c08e936c184de600c6c418d5663baff5 Mon Sep 17 00:00:00 2001 From: Philip Weaver Date: Mon, 22 Jul 2013 19:57:46 -0700 Subject: [PATCH 1/2] in derivequeries panel, set alias for each generated query. --- panels/derivequeries/module.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/panels/derivequeries/module.js b/panels/derivequeries/module.js index 4d79ed0620b..00e8a98ef88 100644 --- a/panels/derivequeries/module.js +++ b/panels/derivequeries/module.js @@ -94,7 +94,7 @@ angular.module('kibana.derivequeries', []) // if it isn't in the list, remove it var _iq = querySrv.findQuery(_q); if(!_iq) { - ids.push(querySrv.set({query:_q})); + ids.push(querySrv.set({alias: v.term, query:_q})); } else { ids.push(_iq.id); } From 20b0bb0f854a6ff1ceb751281bebffbf4f871e42 Mon Sep 17 00:00:00 2001 From: Philip Weaver Date: Mon, 22 Jul 2013 20:06:33 -0700 Subject: [PATCH 2/2] in derivequeries panel, add support for an 'other' query that is everything else that doesn't match. --- panels/derivequeries/editor.html | 5 ++++- panels/derivequeries/module.js | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/panels/derivequeries/editor.html b/panels/derivequeries/editor.html index 96d9eafb0b8..9858498ce45 100644 --- a/panels/derivequeries/editor.html +++ b/panels/derivequeries/editor.html @@ -12,9 +12,12 @@ -
+
+
+ +
diff --git a/panels/derivequeries/module.js b/panels/derivequeries/module.js index 00e8a98ef88..200028c1c89 100644 --- a/panels/derivequeries/module.js +++ b/panels/derivequeries/module.js @@ -8,6 +8,7 @@ * label :: The label to stick over the field * query :: A string to use as a filter for the terms facet * field :: the field to facet on + * rest :: include a filter that matches all other terms, * size :: how many queries to generate * fields :: a list of fields known to us * query_mode :: how to create query @@ -37,6 +38,7 @@ angular.module('kibana.derivequeries', []) field : '_type', fields : [], spyable : true, + rest : false, size : 5, mode : 'terms only', exclude : [], @@ -89,7 +91,9 @@ angular.module('kibana.derivequeries', []) suffix = ' OR (' + $scope.panel.query + ')'; } var ids = []; - _.each(results.facets.query.terms, function(v) { + var terms = results.facets.query.terms; + var others = []; + _.each(terms, function(v) { var _q = $scope.panel.field+':"'+v.term+'"'+suffix; // if it isn't in the list, remove it var _iq = querySrv.findQuery(_q); @@ -98,7 +102,17 @@ angular.module('kibana.derivequeries', []) } else { ids.push(_iq.id); } + others.push("NOT (" + _q + ")"); }); + if ($scope.panel.rest) { + var _other_q = others.join(' AND '); + var _iq = querySrv.findQuery(_other_q); + if (!_iq) { + ids.push(querySrv.set({alias: 'other', query: _other_q})); + } else { + ids.push(_iq.id); + } + } _.each(_.difference($scope.panel.ids,ids),function(id){ querySrv.remove(id); });