如:索引中有两个 stock 跟 lowStock;现在需要把stock小于等于lowStock的数据筛选出来;可以利用 script来实现
kibana 请求如下:
get product_search_index/_search { "query":{ "bool": {"must": [ {"script": { "script":{ "source": " return doc['stock'].value<=doc['lowStock'].value", "lang": "painless" } }} ]} } }
java代码如下:
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
Script script = new Script("doc['stock'].value<=doc['lowStock'].value");
boolQueryBuilder.must(QueryBuilders.scriptQuery(script));
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder();
searchQueryBuilder.withFilter(boolQueryBuilder); SearchHits<XXXDTO> search = es.search(searchQueryBuilder.build(), XXXDTO.class);
如果 文档中某一个字段可能不存在可以改写如下:
get product_search_index/_search { "query":{ "bool": {"must": [ {"script": { "script":{ "source": " long stock=doc['stock'].value;long lowStock=0; if(doc.containsKey('lowStock')&&doc['lowStock'].size()!=0){ lowStock=doc['lowStock'].value; } return stock<=lowStock", "lang": "painless" } }} ]} } }