mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
tech(elastic): use bool conditions for all es queries
This commit is contained in:
2
docker/blocks/elastic1/elasticsearch.yml
Normal file
2
docker/blocks/elastic1/elasticsearch.yml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
script.inline: on
|
||||||
|
script.indexed: on
|
||||||
8
docker/blocks/elastic1/fig
Normal file
8
docker/blocks/elastic1/fig
Normal file
@@ -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
|
||||||
@@ -4,5 +4,5 @@ elasticsearch5:
|
|||||||
image: elasticsearch:5
|
image: elasticsearch:5
|
||||||
command: elasticsearch
|
command: elasticsearch
|
||||||
ports:
|
ports:
|
||||||
- "9200:9200"
|
- "10200:9200"
|
||||||
- "9300:9300"
|
- "10300:9300"
|
||||||
|
|||||||
@@ -88,7 +88,16 @@ function (angular, _, moment, kbn, ElasticQueryBuilder, IndexPattern, ElasticRes
|
|||||||
}
|
}
|
||||||
|
|
||||||
var queryInterpolated = templateSrv.replace(queryString, {}, 'lucene');
|
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 = {
|
var data = {
|
||||||
"query" : query,
|
"query" : query,
|
||||||
|
|||||||
@@ -76,23 +76,13 @@ function (queryDef) {
|
|||||||
|
|
||||||
for (var i = 0; i < aggDef.settings.filters.length; i++) {
|
for (var i = 0; i < aggDef.settings.filters.length; i++) {
|
||||||
var query = aggDef.settings.filters[i].query;
|
var query = aggDef.settings.filters[i].query;
|
||||||
if (this.esVersion >= 5) {
|
|
||||||
filterObj[query] = {
|
filterObj[query] = {
|
||||||
query_string: {
|
query_string: {
|
||||||
query: query,
|
query: query,
|
||||||
analyze_wildcard: true
|
analyze_wildcard: true
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} else {
|
|
||||||
filterObj[query] = {
|
|
||||||
query: {
|
|
||||||
query_string: {
|
|
||||||
query: query,
|
|
||||||
analyze_wildcard: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return filterObj;
|
return filterObj;
|
||||||
@@ -119,12 +109,7 @@ function (queryDef) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var i, filter, condition, must;
|
var i, filter, condition, must;
|
||||||
|
must = query.query.bool.must;
|
||||||
if (this.esVersion >= 5) {
|
|
||||||
must = query.query.bool.must;
|
|
||||||
} else {
|
|
||||||
must = query.query.filtered.filter.bool.must;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < adhocFilters.length; i++) {
|
for (i = 0; i < adhocFilters.length; i++) {
|
||||||
filter = adhocFilters[i];
|
filter = adhocFilters[i];
|
||||||
@@ -143,42 +128,21 @@ function (queryDef) {
|
|||||||
|
|
||||||
var i, nestedAggs, metric;
|
var i, nestedAggs, metric;
|
||||||
var query = {};
|
var query = {};
|
||||||
if (this.esVersion >= 5) {
|
query = {
|
||||||
query = {
|
"size": 0,
|
||||||
"size": 0,
|
"query": {
|
||||||
"query": {
|
"bool": {
|
||||||
"bool": {
|
"must": [
|
||||||
"must": [
|
{"range": this.getRangeFilter()},
|
||||||
{"range": this.getRangeFilter()},
|
{"query_string": {
|
||||||
{"query_string": {
|
"analyze_wildcard": true,
|
||||||
"analyze_wildcard": true,
|
"query": '$lucene_query'
|
||||||
"query": '$lucene_query'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
query = {
|
|
||||||
"size": 0,
|
|
||||||
"query": {
|
|
||||||
"filtered": {
|
|
||||||
"query": {
|
|
||||||
"query_string": {
|
|
||||||
"analyze_wildcard": true,
|
|
||||||
"query": '$lucene_query',
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"filter": {
|
|
||||||
"bool": {
|
|
||||||
"must": [{"range": this.getRangeFilter()}]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
this.addAdhocFilters(query, adhocFilters);
|
this.addAdhocFilters(query, adhocFilters);
|
||||||
|
|
||||||
@@ -258,47 +222,22 @@ function (queryDef) {
|
|||||||
ElasticQueryBuilder.prototype.getTermsQuery = function(queryDef) {
|
ElasticQueryBuilder.prototype.getTermsQuery = function(queryDef) {
|
||||||
var query;
|
var query;
|
||||||
|
|
||||||
if (this.esVersion >= 5) {
|
query = {
|
||||||
query = {
|
"size": 0,
|
||||||
"size": 0,
|
"query": {
|
||||||
"query": {
|
"bool": {
|
||||||
"bool": {
|
"must": [{"range": this.getRangeFilter()}]
|
||||||
"must": [{"range": this.getRangeFilter()}]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
if (queryDef.query) {
|
|
||||||
query.query.bool.must.push({
|
|
||||||
"query_string": {
|
|
||||||
"analyze_wildcard": true,
|
|
||||||
"query": queryDef.query,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
} else {
|
if (queryDef.query) {
|
||||||
query = {
|
query.query.bool.must.push({
|
||||||
"size": 0,
|
"query_string": {
|
||||||
"query": {
|
"analyze_wildcard": true,
|
||||||
"filtered": {
|
"query": queryDef.query,
|
||||||
"filter": {
|
|
||||||
"bool": {
|
|
||||||
"must": [{"range": this.getRangeFilter()}]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
|
|
||||||
if (queryDef.query) {
|
|
||||||
query.query.filtered.query = {
|
|
||||||
"query_string": {
|
|
||||||
"analyze_wildcard": true,
|
|
||||||
"query": queryDef.query,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
query.aggs = {
|
query.aggs = {
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ describe('ElasticDatasource', function() {
|
|||||||
|
|
||||||
it('should json escape lucene query', function() {
|
it('should json escape lucene query', function() {
|
||||||
var body = angular.fromJson(parts[1]);
|
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');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ describe('ElasticQueryBuilder', function() {
|
|||||||
bucketAggs: [{type: 'date_histogram', field: '@timestamp', id: '1'}],
|
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");
|
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:cpu"].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:logins.count"].query_string.query).to.be("@metric:logins.count");
|
||||||
expect(query.aggs["2"].aggs["4"].date_histogram.field).to.be("@timestamp");
|
expect(query.aggs["2"].aggs["4"].date_histogram.field).to.be("@timestamp");
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -291,7 +291,6 @@ describe('ElasticQueryBuilder', function() {
|
|||||||
{key: 'key1', operator: '=', value: 'value1'}
|
{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");
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user