Procházet zdrojové kódy

Merge pull request #265 from pheaver/topic/derivequeries

improvements to derivequeries
Rashid Khan před 12 roky
rodič
revize
421cd5e388
2 změnil soubory, kde provedl 20 přidání a 3 odebrání
  1. 4 1
      panels/derivequeries/editor.html
  2. 16 2
      panels/derivequeries/module.js

+ 4 - 1
panels/derivequeries/editor.html

@@ -12,9 +12,12 @@
       <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>
     </div>
-    <div class="span5">
+    <div class="span4">
       <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>
     </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>

+ 16 - 2
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,16 +91,28 @@ 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);
         if(!_iq) {
-          ids.push(querySrv.set({query:_q}));
+          ids.push(querySrv.set({alias: v.term, query:_q}));
         } 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);
       });