SpringBoot+ElasticSearch聚合查询+条件查询

SpringBoot+ElasticSearch聚合查询+条件查询

es7.0以上

对应mysql语句

select state,count(state) countState from indexName where is_delete=0 group by state
1.指定查询的索引
SearchRequest searchRequest = new SearchRequest(indexName);
2.构建过滤条件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
3.构建聚合条件:根据state字段进行分组
AggregationBuilder aggregationBuilder = AggregationBuilders.terms("state").field("state");
4.构建查询条件:查询未删除
BoolQueryBuilder filterQuery = QueryBuilders.boolQuery();
filterQuery.must(QueryBuilders.termQuery("isDelete", 0));
5.将聚合条件和查询条件放入过滤条件中
searchSourceBuilder.aggregation(aggregationBuilder);
searchSourceBuilder.query(QueryBuilders.boolQuery().filter(filterQuery));

6.将过滤条件放入指定索引中
searchRequest.source(searchSourceBuilder);
7.查询
SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
8.解析查询到结果
	//map:key=分组的状态,value=每组的个数
  Map<String, Integer> stateCountMap = new LinkedHashMap<>();
			//拿到聚合结果
            Terms terms = response.getAggregations().get(Fn.getName(EsTaskEntity::getState));
			//遍历聚合结果
            for (Terms.Bucket bucket : terms.getBuckets()) {
				//getKeyAsString():分组之后每个详细的值
				//bucket.getDocCount() 分组之后每个值得个数
                stateCountMap.put(bucket.getKeyAsString(), Long.valueOf(bucket.getDocCount()).intValue());
            }
原文地址:https://www.cnblogs.com/shuxiaosheng/p/15572782.html