Support for all ad-hoc filter operators on Elasticsearch (#7612)

This commit is contained in:
tamayika 2017-02-21 05:01:52 +09:00 committed by Torkel Ödegaard
parent 072c1559ba
commit b01fd3d0b5
2 changed files with 33 additions and 2 deletions

View File

@ -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;
}
}
};

View File

@ -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");
});
});