Kaynağa Gözat

elasticsearch: changed ad hoc filters from using term filters to using phrase match queries, closing #9095

Torkel Ödegaard 8 yıl önce
ebeveyn
işleme
e91cf28f8d

+ 9 - 5
public/app/plugins/datasource/elasticsearch/query_builder.js

@@ -1,7 +1,8 @@
 define([
-  './query_def'
+  './query_def',
+  'lodash',
 ],
-function (queryDef) {
+function (queryDef, _) {
   'use strict';
 
   function ElasticQueryBuilder(options) {
@@ -133,17 +134,20 @@ function (queryDef) {
       return;
     }
 
-    var i, filter, condition;
+    var i, filter, condition, queryCondition;
     for (i = 0; i < adhocFilters.length; i++) {
       filter = adhocFilters[i];
       condition = {};
       condition[filter.key] = filter.value;
+      queryCondition = {};
+      queryCondition[filter.key] = {query: filter.value};
+
       switch(filter.operator){
         case "=":
-          query.query.bool.filter.push({"term": condition});
+          _.set(query, "query.bool.must.match_phrase", queryCondition);
           break;
         case "!=":
-          query.query.bool.filter.push({"bool": {"must_not": {"term": condition}}});
+          _.set(query, "query.bool.must_not.match_phrase", queryCondition);
           break;
         case "<":
           condition[filter.key] = {"lt": filter.value};

+ 6 - 6
public/app/plugins/datasource/elasticsearch/specs/query_builder_specs.ts

@@ -289,11 +289,11 @@ describe('ElasticQueryBuilder', function() {
       {key: 'key6', operator: '!~', value: 'value6'},
     ]);
 
-    expect(query.query.bool.filter[2].term["key1"]).to.be("value1");
-    expect(query.query.bool.filter[3].bool.must_not.term["key2"]).to.be("value2");
-    expect(query.query.bool.filter[4].range["key3"].lt).to.be("value3");
-    expect(query.query.bool.filter[5].range["key4"].gt).to.be("value4");
-    expect(query.query.bool.filter[6].regexp["key5"]).to.be("value5");
-    expect(query.query.bool.filter[7].bool.must_not.regexp["key6"]).to.be("value6");
+    expect(query.query.bool.must.match_phrase["key1"].query).to.be("value1");
+    expect(query.query.bool.must_not.match_phrase["key2"].query).to.be("value2");
+    expect(query.query.bool.filter[2].range["key3"].lt).to.be("value3");
+    expect(query.query.bool.filter[3].range["key4"].gt).to.be("value4");
+    expect(query.query.bool.filter[4].regexp["key5"]).to.be("value5");
+    expect(query.query.bool.filter[5].bool.must_not.regexp["key6"]).to.be("value6");
   });
 });