Elasticsearch指标聚合,就是类似SQL的统计函数,指标聚合可以单独使用,也可以跟桶聚合一起使用,下面介绍Java Elasticsearch指标聚合的写法。
实例:
// 首先创建RestClient,后续章节通过RestClient对象进行参数配置。
RestClientBuilder restClientBuilder = RestClient.builder(
new HttpHost("localhost", 9200, "http"), // 设置ES服务地址,支持多个
new HttpHost("localhost", 9201, "http"));
// 创建RestHighLevelClient,请求都是通过RestHighLevelClient实例发出去的。
服务器托管网 RestHighLevelClient client = new RestHighLevelClient(restClientBuilder);
// 创建SearchRequest对象, 索引名=order
SearchRequest searchRequest = new SearchRequest("order");
// 通过SearchSourceBuilder构建搜索参数
SearchSourceBuilder builder = new SearchSourceBuilder();
// 通过QueryBuilders构建ES查询条件,这里查询所有文档,复杂的查询语句设置请参考前面的章节。
builder.query(QueryBuilders.matchAllQuery());
// 创建Value Count指标聚合
// 聚合统计命名为:orders, 统计order_id字段值的数量
ValueCountAggregationBuilder valueCountAggregationBuilder = AggregationBuilders.count("orders")
.field("order_id");
// 创建Sum指标聚合
// 聚合统计命名为:total_sale, 统计price字段值的总和
SumAggregationBuilder sumAggregationBuilder = AggregationBuilders.sum("total_sale")
.field("price");
// 设置聚合查询,可以设置多个聚合查询条件,只要聚合查询命名不同就行
builder.aggregation(valueCountAggregationBuilder);
builder.aggregation(sumAggregationBuilder);
// 设置搜索条件
searchRequest.source(builder);
// 执行ES请求
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
// 处理聚合查询结果
Aggregations aggregations = searchResponse.getAggregations();
// 根据orders命名查询,ValueCount统计结果
ValueCount valueCount = aggregations.get("orders");
System.out.println(valueCount.getValue());
// 根据total_sale命名查询,Sum统计结果
Sum sum = aggregations.get("total_sale");
System.out.println(sum.getValue());
其他指标聚合的用法类似,后面分别介绍常用指标聚合。
常用指标聚合
1. Value Count
值聚合,主要用于统计文档总数,类似SQL的count函数。
创建聚合条件
// 创建Value Count指标聚合
// 聚合统计命名为:orders, 统计order_id字段值的数量
ValueCountAggregationBuilder valueCountAggregationBuilder = AggregationBuilders.count("orders")
.field("order_id");```
处理聚合结果
```java
Aggregations aggregations = searchResponse.getAggregations();
// 根据orders命名查询,ValueCount统计结果
ValueCount valueCount = aggregations.get("orders");
// 打印结果
System.out.println(valueCount.getValue());
2.Cardinality
基数聚合,也是用于统计文档的总数,跟Value Count的区别是,基数聚合会去重,不会统计重复的值,类似SQL的count(DISTINCT 字段)用法。基数聚合是一种近似算法,统计的结果会有一定误差,不过性能很好。
创建聚合条件:
// 聚合统计命名为:total, 近似统计id字段值的数量
CardinalityAggregationBuilder cardinalityAggregationBuilder = AggregationBuilders.cardinality("total")
.field("id");
处理聚合结果
Aggregations aggregations = searchResponse.getAggregations();
// 根据total命名查询,Cardinality统计结果
Cardinality cardinality = aggregations.get("total");
// 打印结果
System.out.println(cardinality.getValue());
3.Avg
求平均值
创建聚合条件
AvgAggregationBuilder avgAg服务器托管网gregationBuilder = AggregationBuilders.avg("avg_price")
.field("price");
处理聚合结果
Aggregations aggregations = searchResponse.getAggregations();
// 根据total命名查询,Avg统计结果
Avg avgPrice = aggregations.get("avg_price");
// 打印结果
System.out.println(avgPrice.getValue());
4.Sum
求和计算
创建聚合条件
SumAggregationBuilder sumAggregationBuilder = AggregationBuilders.sum("total_sale")
.field("price");
处理聚合结果
Aggregations aggregations = searchResponse.getAggregations();
// 根据total命名查询,Sum统计结果
Sum totalPrice = aggregations.get("total_sale");
// 打印结果
System.out.println(totalPrice.getValue());
5.Max
求最大值
创建聚合条件
MaxAggregationBuilder maxAggregationBuilder = AggregationBuilders.max("max_price")
.field("price");
处理聚合结果
// 处理聚合查询结果
Aggregations aggregations = searchResponse.getAggregations();
// 根据max_price命名查询,Max统计结果
Max maxPrice = aggregations.get("max_price");
// 打印结果
System.out.println(maxPrice.getValue());
6.min
求最小值
创建聚合条件
MinAggregationBuilder minAggregationBuilder = AggregationBuilders.min("min_price")
.field("price");
处理聚合结果
Aggregations aggregations = searchResponse.getAggregations();
// 根据min_price命名查询,Min统计结果
Min minPrice = aggregations.get("min_price");
// 打印结果
System.out.println(minPrice.getValue());
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
一、文件组成:1、网站文件进级.exe———–主程序。2、客户端目录.txt———–用于保留客户端目录数据,供软件使用3、up.ini——–服务器托管网—客户端文件进级信息配置文件二、功能简介:使用此工具能生一份up.…