elasticSearch5.X javaAPI rangeQuery分区间查询,最终用了一种最low的方法凑合?不知大神们有没有好解决方案?
Elasticsearch | 作者 zlw7741 | 发布于2017年10月11日 | 阅读数:8768
age年龄(int类型)有0-100岁,比如我想查询20-30和40-50岁的人:
"range": {
"field": "age",
"ranges": [
{
"from": 20,
"to": 30
},
{
"from": 40,
"to": 50
}
]
}
我首先想到的是这样:
BoolQueryBuilder bqb = QueryBuilders.boolQuery();
bqb.filter(QueryBuilders.rangeQuery("age").from(20).to(30).from(40).to(50));
SearchRequestBuilder setQuery = setTypes.setQuery(bqb);
这样查询出来的结果只有40-50。然后我换了一种方式:
BoolQueryBuilder bqb = QueryBuilders.boolQuery();
bqb.filter(QueryBuilders.rangeQuery("age").from(20).to(30));
bqb.filter(QueryBuilders.rangeQuery("age").from(40).to(50));
SearchRequestBuilder setQuery = setTypes.setQuery(bqb);
这种方式查出来的数据为null.fileter和must的结果是一样的,should会查询出0-100的年龄,并不是我想要的。
最后我用了mustnot:
BoolQueryBuilder bqb = QueryBuilders.boolQuery();
bqb.mustNot(QueryBuilders.rangeQuery("age").to(20));
bqb.mustNot(QueryBuilders.rangeQuery("age").from(30).to(40));
bqb.mustNot(QueryBuilders.rangeQuery("age").from(50));
SearchRequestBuilder setQuery = setTypes.setQuery(bqb);
数据达到了我的需求,但这样肯定是不对的。如果我不想要区间,想要21、31、41岁的数据,ES,javaapi怎么实现??...
"range": {
"field": "age",
"ranges": [
{
"from": 20,
"to": 30
},
{
"from": 40,
"to": 50
}
]
}
我首先想到的是这样:
BoolQueryBuilder bqb = QueryBuilders.boolQuery();
bqb.filter(QueryBuilders.rangeQuery("age").from(20).to(30).from(40).to(50));
SearchRequestBuilder setQuery = setTypes.setQuery(bqb);
这样查询出来的结果只有40-50。然后我换了一种方式:
BoolQueryBuilder bqb = QueryBuilders.boolQuery();
bqb.filter(QueryBuilders.rangeQuery("age").from(20).to(30));
bqb.filter(QueryBuilders.rangeQuery("age").from(40).to(50));
SearchRequestBuilder setQuery = setTypes.setQuery(bqb);
这种方式查出来的数据为null.fileter和must的结果是一样的,should会查询出0-100的年龄,并不是我想要的。
最后我用了mustnot:
BoolQueryBuilder bqb = QueryBuilders.boolQuery();
bqb.mustNot(QueryBuilders.rangeQuery("age").to(20));
bqb.mustNot(QueryBuilders.rangeQuery("age").from(30).to(40));
bqb.mustNot(QueryBuilders.rangeQuery("age").from(50));
SearchRequestBuilder setQuery = setTypes.setQuery(bqb);
数据达到了我的需求,但这样肯定是不对的。如果我不想要区间,想要21、31、41岁的数据,ES,javaapi怎么实现??...
2 个回复
kennywu76 - Wood
赞同来自: Cheetah 、linxiuyuan 、zlw7741
kennywu76 - Wood
赞同来自: zlw7741 、vearne