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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM