Elasticsearch使用java API 查询时间范围内匹配某个关键字并对查询结果内按某个字段进行GroupBy操作,我们业务需求是求某个手机前缀在某个时间范围内每个imsi对应的总数
代码如下:
public void searchByPrefix(List<String> prefixList , String fromTime , String endTime){
for (String prefix : prefixList) {
QueryBuilder query = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("time").from(fromTime).to(endTime))
.must(QueryBuilders.wildcardQuery("phone_prefix", prefix));
//.must(QueryBuilders.matchQuery("phone_prefix", prefix));
TermsAggregationBuilder builder = AggregationBuilders.terms("count_imsi").field("imsi");
// ResIndex resIndex =
// super.selectByPrimaryKey(deviceCountReqVo.getIndexId());
SearchResponse searchResponse = transportClient.prepareSearch("ori_epotential_res_*").setTypes("ori_epotential_res").setQuery(query).addAggregation(builder)
.setFrom(0).setSize(5)// 分页
.get();
System.out.println(searchResponse.toString());
}
}
代码中的:
.must(QueryBuilders.wildcardQuery("phone_prefix", prefix));
.must(QueryBuilders.matchQuery("phone_prefix", prefix));
分别是通配符模糊查询和精确字段匹配。