Elasticsearch使用java API 查询时间范围内匹配某个关键字并对查询结果内按某个字段进行GroupBy操作

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));

分别是通配符模糊查询和精确字段匹配。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注