獲取平均值聚合示例,最大值、最小值、求和類似
public void aggregation(){ RestHighLevelClient client = elasticClient.getRestHighLevelClient(); SearchRequest searchRequest = new SearchRequest(); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); TermsAggregationBuilder aggregation = AggregationBuilders.terms("by_sex") .field("sex.keyword"); //text類型不能用於索引或排序,必須轉成keyword類型 aggregation.subAggregation(AggregationBuilders.avg("avg_age") .field("age")); //avg_age 為子聚合名稱,名稱可隨意 searchSourceBuilder.aggregation(aggregation); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = null; try { searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); } catch (IOException e) { e.printStackTrace(); } Aggregations aggregations = searchResponse.getAggregations(); Terms byCompanyAggregation = aggregations.get("by_sex"); Terms.Bucket elasticBucket = byCompanyAggregation.getBucketByKey("女性"); Avg averageAge = elasticBucket.getAggregations().get("avg_age"); double avg = averageAge.getValue(); System.out.println("女性平均年齡:"+avg); }
Stats統計
public void stats(){ RestHighLevelClient client = elasticClient.getRestHighLevelClient(); SearchRequest searchRequest = new SearchRequest(); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); TermsAggregationBuilder aggregation = AggregationBuilders.terms("by_sex") .field("sex.keyword"); //by_sex為聚合名稱,名稱可隨意 aggregation.subAggregation(AggregationBuilders.stats("stat_age") .field("age")); //avg_age 為子聚合名稱,名稱可隨意 searchSourceBuilder.aggregation(aggregation); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = null; try { searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); } catch (IOException e) { e.printStackTrace(); } Aggregations aggregations = searchResponse.getAggregations(); Terms byCompanyAggregation = aggregations.get("by_sex"); List<? extends Terms.Bucket> buckets = byCompanyAggregation.getBuckets(); for (Terms.Bucket bucket : buckets) { Stats statAge = bucket.getAggregations().get("stat_age"); System.out.println(bucket.getKey()); //獲取分組名稱 System.out.println("平均值:"+statAge.getAvg()); System.out.println("總數:"+statAge.getSum()); System.out.println("最大值:"+statAge.getMaxAsString()); System.out.println("最小值:"+statAge.getMin()); } }
