Commit 20b0bb0f by Philip Weaver

in derivequeries panel, add support for an 'other' query that is everything else…

in derivequeries panel, add support for an 'other' query that is everything else that doesn't match.
parent 4249bdc6
...@@ -12,9 +12,12 @@ ...@@ -12,9 +12,12 @@
<label class="small">Query Mode</label> <label class="small">Query Mode</label>
<select style="width:80%" ng-change="set_refresh(true)" ng-model='panel.mode' ng-options="f for f in ['terms only','AND', 'OR']"></select> <select style="width:80%" ng-change="set_refresh(true)" ng-model='panel.mode' ng-options="f for f in ['terms only','AND', 'OR']"></select>
</div> </div>
<div class="span5"> <div class="span4">
<label class="small">Exclude Terms(s) (comma seperated)</label> <label class="small">Exclude Terms(s) (comma seperated)</label>
<input array-join type="text" style="width:90%" ng-change="set_refresh(true)" ng-model='panel.exclude'></input> <input array-join type="text" style="width:90%" ng-change="set_refresh(true)" ng-model='panel.exclude'></input>
</div> </div>
<div class="span1">
<label class="small"> Rest </label><input type="checkbox" ng-model="panel.rest" ng-checked="panel.rest" ng-change="set_refresh(true)">
</div>
</div> </div>
</div> </div>
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
* label :: The label to stick over the field * label :: The label to stick over the field
* query :: A string to use as a filter for the terms facet * query :: A string to use as a filter for the terms facet
* field :: the field to facet on * field :: the field to facet on
* rest :: include a filter that matches all other terms,
* size :: how many queries to generate * size :: how many queries to generate
* fields :: a list of fields known to us * fields :: a list of fields known to us
* query_mode :: how to create query * query_mode :: how to create query
...@@ -37,6 +38,7 @@ angular.module('kibana.derivequeries', []) ...@@ -37,6 +38,7 @@ angular.module('kibana.derivequeries', [])
field : '_type', field : '_type',
fields : [], fields : [],
spyable : true, spyable : true,
rest : false,
size : 5, size : 5,
mode : 'terms only', mode : 'terms only',
exclude : [], exclude : [],
...@@ -89,7 +91,9 @@ angular.module('kibana.derivequeries', []) ...@@ -89,7 +91,9 @@ angular.module('kibana.derivequeries', [])
suffix = ' OR (' + $scope.panel.query + ')'; suffix = ' OR (' + $scope.panel.query + ')';
} }
var ids = []; 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; var _q = $scope.panel.field+':"'+v.term+'"'+suffix;
// if it isn't in the list, remove it // if it isn't in the list, remove it
var _iq = querySrv.findQuery(_q); var _iq = querySrv.findQuery(_q);
...@@ -98,7 +102,17 @@ angular.module('kibana.derivequeries', []) ...@@ -98,7 +102,17 @@ angular.module('kibana.derivequeries', [])
} else { } else {
ids.push(_iq.id); 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){ _.each(_.difference($scope.panel.ids,ids),function(id){
querySrv.remove(id); querySrv.remove(id);
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment