聚合查询类型:
- 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");