From 873024b917dc199c42948414869c92c17a401be2 Mon Sep 17 00:00:00 2001 From: bergquist Date: Tue, 6 Dec 2016 16:04:31 +0100 Subject: [PATCH] tech(elastic): use bool conditions for all es queries --- docker/blocks/elastic1/elasticsearch.yml | 2 + docker/blocks/elastic1/fig | 8 ++ docker/blocks/elastic5/fig | 4 +- .../datasource/elasticsearch/datasource.js | 11 +- .../datasource/elasticsearch/query_builder.js | 125 +++++------------- .../elasticsearch/specs/datasource_specs.ts | 2 +- .../specs/query_builder_specs.ts | 9 +- 7 files changed, 59 insertions(+), 102 deletions(-) create mode 100644 docker/blocks/elastic1/elasticsearch.yml create mode 100644 docker/blocks/elastic1/fig diff --git a/docker/blocks/elastic1/elasticsearch.yml b/docker/blocks/elastic1/elasticsearch.yml new file mode 100644 index 00000000000..c57b2c12908 --- /dev/null +++ b/docker/blocks/elastic1/elasticsearch.yml @@ -0,0 +1,2 @@ +script.inline: on +script.indexed: on diff --git a/docker/blocks/elastic1/fig b/docker/blocks/elastic1/fig new file mode 100644 index 00000000000..c33e51f16a2 --- /dev/null +++ b/docker/blocks/elastic1/fig @@ -0,0 +1,8 @@ +elasticsearch1: + image: elasticsearch:1.7.6 + command: elasticsearch -Des.network.host=0.0.0.0 + ports: + - "11200:9200" + - "11300:9300" + volumes: + - ./blocks/elastic/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml diff --git a/docker/blocks/elastic5/fig b/docker/blocks/elastic5/fig index c1c00bea168..6e5cd89ab3d 100644 --- a/docker/blocks/elastic5/fig +++ b/docker/blocks/elastic5/fig @@ -4,5 +4,5 @@ elasticsearch5: image: elasticsearch:5 command: elasticsearch ports: - - "9200:9200" - - "9300:9300" + - "10200:9200" + - "10300:9300" diff --git a/public/app/plugins/datasource/elasticsearch/datasource.js b/public/app/plugins/datasource/elasticsearch/datasource.js index 183f22f4b3f..bf67c2c72cc 100644 --- a/public/app/plugins/datasource/elasticsearch/datasource.js +++ b/public/app/plugins/datasource/elasticsearch/datasource.js @@ -88,7 +88,16 @@ function (angular, _, moment, kbn, ElasticQueryBuilder, IndexPattern, ElasticRes } var queryInterpolated = templateSrv.replace(queryString, {}, 'lucene'); - var query = { "bool": { "must": [{ "range": range }, { "query_string": { "query": queryInterpolated } }] }}; + var query = { + "bool": { + "must": [ + { "range": range }, + { "query_string": { + "query": queryInterpolated } + } + ] + } + }; var data = { "query" : query, diff --git a/public/app/plugins/datasource/elasticsearch/query_builder.js b/public/app/plugins/datasource/elasticsearch/query_builder.js index 76608b7f90c..712901b4d18 100644 --- a/public/app/plugins/datasource/elasticsearch/query_builder.js +++ b/public/app/plugins/datasource/elasticsearch/query_builder.js @@ -76,23 +76,13 @@ function (queryDef) { for (var i = 0; i < aggDef.settings.filters.length; i++) { var query = aggDef.settings.filters[i].query; - if (this.esVersion >= 5) { - filterObj[query] = { - query_string: { - query: query, - analyze_wildcard: true - } - }; - } else { - filterObj[query] = { - query: { - query_string: { - query: query, - analyze_wildcard: true - } - } - }; - } + + filterObj[query] = { + query_string: { + query: query, + analyze_wildcard: true + } + }; } return filterObj; @@ -119,12 +109,7 @@ function (queryDef) { } var i, filter, condition, must; - - if (this.esVersion >= 5) { - must = query.query.bool.must; - } else { - must = query.query.filtered.filter.bool.must; - } + must = query.query.bool.must; for (i = 0; i < adhocFilters.length; i++) { filter = adhocFilters[i]; @@ -143,42 +128,21 @@ function (queryDef) { var i, nestedAggs, metric; var query = {}; - if (this.esVersion >= 5) { - query = { - "size": 0, - "query": { - "bool": { - "must": [ - {"range": this.getRangeFilter()}, - {"query_string": { - "analyze_wildcard": true, - "query": '$lucene_query' - } - } - ] - } - } - }; - } else { - query = { - "size": 0, - "query": { - "filtered": { - "query": { - "query_string": { - "analyze_wildcard": true, - "query": '$lucene_query', - } - }, - "filter": { - "bool": { - "must": [{"range": this.getRangeFilter()}] + query = { + "size": 0, + "query": { + "bool": { + "must": [ + {"range": this.getRangeFilter()}, + {"query_string": { + "analyze_wildcard": true, + "query": '$lucene_query' } } - } + ] } - }; - } + } + }; this.addAdhocFilters(query, adhocFilters); @@ -258,47 +222,22 @@ function (queryDef) { ElasticQueryBuilder.prototype.getTermsQuery = function(queryDef) { var query; - if (this.esVersion >= 5) { - query = { - "size": 0, - "query": { - "bool": { - "must": [{"range": this.getRangeFilter()}] - } + query = { + "size": 0, + "query": { + "bool": { + "must": [{"range": this.getRangeFilter()}] } - }; - - if (queryDef.query) { - query.query.bool.must.push({ - "query_string": { - "analyze_wildcard": true, - "query": queryDef.query, - } - }); } + }; - } else { - query = { - "size": 0, - "query": { - "filtered": { - "filter": { - "bool": { - "must": [{"range": this.getRangeFilter()}] - } - } - } + if (queryDef.query) { + query.query.bool.must.push({ + "query_string": { + "analyze_wildcard": true, + "query": queryDef.query, } - }; - - if (queryDef.query) { - query.query.filtered.query = { - "query_string": { - "analyze_wildcard": true, - "query": queryDef.query, - } - }; - } + }); } query.aggs = { diff --git a/public/app/plugins/datasource/elasticsearch/specs/datasource_specs.ts b/public/app/plugins/datasource/elasticsearch/specs/datasource_specs.ts index 0a93844e968..0c08117f59c 100644 --- a/public/app/plugins/datasource/elasticsearch/specs/datasource_specs.ts +++ b/public/app/plugins/datasource/elasticsearch/specs/datasource_specs.ts @@ -77,7 +77,7 @@ describe('ElasticDatasource', function() { it('should json escape lucene query', function() { var body = angular.fromJson(parts[1]); - expect(body.query.filtered.query.query_string.query).to.be('escape\\:test'); + expect(body.query.bool.must[1].query_string.query).to.be('escape\\:test'); }); }); diff --git a/public/app/plugins/datasource/elasticsearch/specs/query_builder_specs.ts b/public/app/plugins/datasource/elasticsearch/specs/query_builder_specs.ts index fab0319afda..72350b6e02f 100644 --- a/public/app/plugins/datasource/elasticsearch/specs/query_builder_specs.ts +++ b/public/app/plugins/datasource/elasticsearch/specs/query_builder_specs.ts @@ -16,7 +16,7 @@ describe('ElasticQueryBuilder', function() { bucketAggs: [{type: 'date_histogram', field: '@timestamp', id: '1'}], }); - expect(query.query.filtered.filter.bool.must[0].range["@timestamp"].gte).to.be("$timeFrom"); + expect(query.query.bool.must[0].range["@timestamp"].gte).to.be("$timeFrom"); expect(query.aggs["1"].date_histogram.extended_bounds.min).to.be("$timeFrom"); }); @@ -154,8 +154,8 @@ describe('ElasticQueryBuilder', function() { ], }); - expect(query.aggs["2"].filters.filters["@metric:cpu"].query.query_string.query).to.be("@metric:cpu"); - expect(query.aggs["2"].filters.filters["@metric:logins.count"].query.query_string.query).to.be("@metric:logins.count"); + expect(query.aggs["2"].filters.filters["@metric:cpu"].query_string.query).to.be("@metric:cpu"); + expect(query.aggs["2"].filters.filters["@metric:logins.count"].query_string.query).to.be("@metric:logins.count"); expect(query.aggs["2"].aggs["4"].date_histogram.field).to.be("@timestamp"); }); @@ -291,7 +291,6 @@ describe('ElasticQueryBuilder', function() { {key: 'key1', operator: '=', value: 'value1'} ]); - expect(query.query.filtered.filter.bool.must[1].term["key1"]).to.be("value1"); + expect(query.query.bool.must[2].term["key1"]).to.be("value1"); }); - });