聚合查询类型:
- metric(度量)聚合:度量类型聚合主要针对的number类型的数据,需要ES做比较多的计算工作
- bucketing(桶)聚合:划分不同的“桶”,将数据分配到不同的“桶”里。非常类似sql中的group语句的含义。
text变量,String类型不能用来分组。!!!!!!!!!
metric(度量)聚合:
1.接口:
/** * metric聚合查询 * @param client 连接 * @param indexName 索引名称 * @param typeName type名称 */ public void aggregateAllStudent(TransportClient client, String indexName, String typeName);
2.实现类
@Override public void aggregateAllStudent(TransportClient client, String indexName, String typeName) { SearchRequestBuilder search = client.prepareSearch(indexName).setTypes(typeName); //求字段平均数 SearchResponse avgSr = search.addAggregation(AggregationBuilders.avg("avg_score").field("score")).execute().actionGet(); //年龄最大值 SearchResponse maxSr = search.addAggregation(AggregationBuilders.max("max_age").field("age")).execute().actionGet(); //年龄最小值 SearchResponse minSr = search.addAggregation(AggregationBuilders.min("min_age").field("age")).execute().actionGet(); //分数总和 SearchResponse sumSr = search.addAggregation(AggregationBuilders.sum("sum_score").field("score")).execute().actionGet(); //对应的对象获取别名字段 Avg avgResult = avgSr.getAggregations().get("avg_score"); Max maxResult = maxSr.getAggregations().get("max_age"); Min minResult = minSr.getAggregations().get("min_age"); Sum sumResult = sumSr.getAggregations().get("sum_score"); System.out.println("分数平均" + avgResult.getValue()); System.out.println("年龄最大" + maxResult.getValue()); System.out.println("年龄最小" + minResult.getValue()); System.out.println("分数总和" + sumResult.getValue()); }
3.测试类:
// metric聚合查询 searchService.aggregateAllStudent(ConEsUtil.creatConEs(),"school1","student");
4.结果:
.................连接成功! 分数平均11.0 年龄最大2235.0 年龄最小22.0 分数总和66.0
bucketing(桶)聚合:
1.接口:
/** * bucketing聚合查询 * @param client 连接 * @param indexName 索引名称 * @param typeName type名称 */ public void bucketAggregateStudent(TransportClient client, String indexName, String typeName);
2.实现类:
@Override public void bucketAggregateStudent(TransportClient client, String indexName, String typeName) { SearchRequestBuilder search = client.prepareSearch(indexName).setTypes(typeName); //分组查询 HistogramAggregationBuilder addtion = AggregationBuilders.histogram("prices").interval(2000).field("age"); SearchResponse sr = search.addAggregation(addtion).execute().actionGet(); Histogram histogram = sr.getAggregations().get("prices"); List<Histogram.Bucket> list = (List<Histogram.Bucket>) histogram.getBuckets(); for (Histogram.Bucket bucket : list ) { System.out.println(bucket.getKey()); } }
3.测试类:
// bucket 聚合查询 searchService.bucketAggregateStudent(ConEsUtil.creatConEs(),"school1","student");