Pārlūkot izejas kodu

fix(elasticsearch): fix json escape logic when doing terms template value lookup, fixes #5485

Torkel Ödegaard 9 gadi atpakaļ
vecāks
revīzija
474a821767

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

@@ -205,13 +205,8 @@ function (angular, _, moment, kbn, ElasticQueryBuilder, IndexPattern, ElasticRes
     };
 
     function escapeForJson(value) {
-      return value
-        .replace(/\s/g, '\\ ')
-        .replace(/\"/g, '\\"');
-    }
-
-    function luceneThenJsonFormat(value) {
-      return escapeForJson(templateSrv.luceneFormat(value));
+      var luceneQuery = JSON.stringify(value);
+      return luceneQuery.substr(1, luceneQuery.length - 2);
     }
 
     this.getFields = function(query) {
@@ -256,7 +251,7 @@ function (angular, _, moment, kbn, ElasticQueryBuilder, IndexPattern, ElasticRes
       var header = this.getQueryHeader('count', range.from, range.to);
       var esQuery = angular.toJson(this.queryBuilder.getTermsQuery(queryDef));
 
-      esQuery = esQuery.replace("$lucene_query", escapeForJson(queryDef.query || '*'));
+      esQuery = esQuery.replace("$lucene_query", escapeForJson(queryDef.query));
       esQuery = esQuery.replace(/\$timeFrom/g, range.from.valueOf());
       esQuery = esQuery.replace(/\$timeTo/g, range.to.valueOf());
       esQuery = header + '\n' + esQuery + '\n';
@@ -270,8 +265,9 @@ function (angular, _, moment, kbn, ElasticQueryBuilder, IndexPattern, ElasticRes
     };
 
     this.metricFindQuery = function(query) {
-      query = templateSrv.replace(query, {}, luceneThenJsonFormat);
       query = angular.fromJson(query);
+      query.query = templateSrv.replace(query.query || '*', {}, 'lucene');
+
       if (!query) {
         return $q.when([]);
       }