网站备案幕布怎么申请,绍兴cms建站模板,本地网站可以做吗?,京东在线购物网站Elasticsearch指标聚合#xff0c;就是类似SQL的统计函数#xff0c;指标聚合可以单独使用#xff0c;也可以跟桶聚合一起使用#xff0c;下面介绍Java Elasticsearch指标聚合的写法。
实例#xff1a;
// 首先创建RestClient#xff0c;后续章节通过RestClient对象进行…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 avgAggregationBuilder 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());