diff --git a/public/app/plugins/datasource/elasticsearch/query_builder.js b/public/app/plugins/datasource/elasticsearch/query_builder.js index 0cd592b0846..11e8b69ddaa 100644 --- a/public/app/plugins/datasource/elasticsearch/query_builder.js +++ b/public/app/plugins/datasource/elasticsearch/query_builder.js @@ -120,7 +120,28 @@ function (queryDef) { filter = adhocFilters[i]; condition = {}; condition[filter.key] = filter.value; - query.query.bool.filter.push({"term": condition}); + switch(filter.operator){ + case "=": + query.query.bool.filter.push({"term": condition}); + break; + case "!=": + query.query.bool.filter.push({"bool": {"must_not": {"term": condition}}}); + break; + case "<": + condition[filter.key] = {"lt": filter.value}; + query.query.bool.filter.push({"range": condition}); + break; + case ">": + condition[filter.key] = {"gt": filter.value}; + query.query.bool.filter.push({"range": condition}); + break; + case "=~": + query.query.bool.filter.push({"regexp": condition}); + break; + case "!~": + query.query.bool.filter.push({"bool": {"must_not": {"regexp": condition}}}); + break; + } } }; 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 e5d58c9db53..e60cde7a163 100644 --- a/public/app/plugins/datasource/elasticsearch/specs/query_builder_specs.ts +++ b/public/app/plugins/datasource/elasticsearch/specs/query_builder_specs.ts @@ -255,9 +255,19 @@ describe('ElasticQueryBuilder', function() { timeField: '@timestamp', bucketAggs: [{type: 'date_histogram', field: '@timestamp', id: '3'}], }, [ - {key: 'key1', operator: '=', value: 'value1'} + {key: 'key1', operator: '=', value: 'value1'}, + {key: 'key2', operator: '!=', value: 'value2'}, + {key: 'key3', operator: '<', value: 'value3'}, + {key: 'key4', operator: '>', value: 'value4'}, + {key: 'key5', operator: '=~', value: 'value5'}, + {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"); }); });