Elasticsearch索引聚合Aggregation


對於使用Elasticsearch來實現關系數據庫中的group by操作,可以使用Aggregation,(本文純手打,由於該用例是17年實現的,所以諒解,只是給大家提供思路)

簡單舉例:Elasticsearch5

//自己去實現client

TransportClient client = null;

//定義SearchRequestBuilder

SearchRequestBuilder sBuilder = client.prepareSearch("cars").setType("info");

//select color,count(1) as color_count form table1 group by color

TermsAggregationBuilder teamColorAgg = AggregationBuilders.terms("color_count").field("color");

sBuilder.addAggregation(teamColorAgg);

SearchResponse response = sBuilder.execute().actionGet();

Map<String,Aggregation> aggMap = response.getAggregations().asMap();

Terms terms = (Terms)aggMap.get("color_count");

List<Terms.Bucket> list = terms.getBuckets();

int size = list.size();

Terms.Bucket bucket = null;

for(int i=0;i<size;i++){

  bucket = list.get(i); 

  System.out.println(bucket.getKey()); //自己加斷點看一下結果就好

}

//多字段的嵌套分組帶條件的聚合

//select color,max(price) as max_price from table1 group by color

sBuilder.addAggregation(teamColorAgg);就是在執行這段代碼之前多定義一些Aggregation

MaxAggregationBuilder pirceAgg= AggregationBuilders.max("max_price").field("price");

sBuilder.addAggregation(teamColorAgg.subAggregation(pirceAgg))); //subAggregation(?) 支持多種聚合類型,例如SumAggregation

//本人實際項目是支持靈活多級自定義嵌套分組,已經實現

 


免責聲明!

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



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