当前位置: 首页 > article >正文

Java Elasticsearch 指标聚合

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());

http://www.kler.cn/a/147420.html

相关文章:

  • LLMs之Code:Qwen2.5-Coder的简介、安装和使用方法、案例应用之详细攻略
  • 【C++】深入理解 C++ 优先级队列、容器适配器与 deque:实现与应用解析
  • 蓝桥杯——数组
  • 从北美火到中国,大数据洞察品牌“STANLEY”的突围之路
  • C/C++语言基础--initializer_list表达式、tuple元组、pair对组简介
  • windows tomcat 报错后如何让窗口不闪退
  • web项目中数据库创建流程框架
  • 掌握高效性能测试技能:JMeter基础入门!
  • C#中openFileDialog控件的使用方法
  • ubuntu22.04 arrch64版操作系统编译zlmediakit
  • 处理器及微控制器:XCZU15EG-2FFVC900I 可编程单元
  • 用于图像分类任务的经典神经网络综述
  • cpu飙高问题,案例分析(二)——批处理数据过大引起的应用服务CPU飙高
  • 个人财务管理软件CheckBook Pro mac中文版特点介绍
  • WebGL技术框架及功能
  • 【密码学引论】序列密码
  • 2-Python与设计模式--工厂类相关模式
  • 曝光!WPS用户信息或被盗用,紧急行动,迅软DSE数据加密应时而动!
  • Spring不再支持Java8了
  • 基于OGG实现MySQL实时同步
  • c#数据库:vs2022 加入mysql数据源
  • Vue基础入门(四):Vue3快速开发模板
  • http协议补充
  • 【Linux】 file命令使用
  • MySQL的基础知识
  • 代码随想录算法训练营 ---第四十八天