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