Java Elasticsearch 指标聚合

news/2024/7/7 5:48:33 标签: elasticsearch, 开发语言, java, 大数据

Elasticsearch指标聚合,就是类似SQL的统计函数,指标聚合可以单独使用,也可以跟桶聚合一起使用,下面介绍Java Elasticsearch指标聚合的写法。

实例:

java">// 首先创建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函数。
创建聚合条件

java">// 创建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 字段)用法。基数聚合是一种近似算法,统计的结果会有一定误差,不过性能很好。
创建聚合条件:

java">// 聚合统计命名为:total, 近似统计id字段值的数量
CardinalityAggregationBuilder cardinalityAggregationBuilder = AggregationBuilders.cardinality("total")
                .field("id");

处理聚合结果

java">Aggregations aggregations = searchResponse.getAggregations();
// 根据total命名查询,Cardinality统计结果
Cardinality cardinality = aggregations.get("total");
// 打印结果
System.out.println(cardinality.getValue());

3.Avg

求平均值
创建聚合条件

java">AvgAggregationBuilder avgAggregationBuilder = AggregationBuilders.avg("avg_price")
                .field("price");

处理聚合结果

java">Aggregations aggregations = searchResponse.getAggregations();
// 根据total命名查询,Avg统计结果
Avg avgPrice = aggregations.get("avg_price");
// 打印结果
System.out.println(avgPrice.getValue());

4.Sum

求和计算
创建聚合条件

java">SumAggregationBuilder sumAggregationBuilder = AggregationBuilders.sum("total_sale")
                .field("price");

处理聚合结果

java">Aggregations aggregations = searchResponse.getAggregations();
// 根据total命名查询,Sum统计结果
Sum totalPrice = aggregations.get("total_sale");
// 打印结果
System.out.println(totalPrice.getValue());

5.Max

求最大值
创建聚合条件

java">MaxAggregationBuilder maxAggregationBuilder = AggregationBuilders.max("max_price")
                .field("price");

处理聚合结果

java">// 处理聚合查询结果
Aggregations aggregations = searchResponse.getAggregations();
// 根据max_price命名查询,Max统计结果
Max maxPrice = aggregations.get("max_price");
// 打印结果
System.out.println(maxPrice.getValue());

6.min

求最小值
创建聚合条件

java">MinAggregationBuilder minAggregationBuilder = AggregationBuilders.min("min_price")
                .field("price");

处理聚合结果

java">Aggregations aggregations = searchResponse.getAggregations();
// 根据min_price命名查询,Min统计结果
Min minPrice = aggregations.get("min_price");
// 打印结果
System.out.println(minPrice.getValue());

http://www.niftyadmin.cn/n/5221328.html

相关文章

10 OAuth2.0实战:认证授权中心搭建

木谷博客系统的认证授权中心使用Spring Cloud Security+OAuth2搭建,完全遵循OAuth2.0规范。 实战部分只介绍木谷博客系统中的重点,关于细节请看笔者之前的文章:实战干货!Spring Cloud Gateway集成OAuth2.0 实现分布式统一认证授权! 客户端信息存储 OAuth2.0中的四种模式…

性价比高的照明品牌,考研考公必备护眼台灯推荐

据国家卫生健康委员会发布的调查数据显示,我国青少年儿童总体近视率为52.7%、高度近视人口超3000万。儿童是民族的未来和希望,青少年儿童眼健康问题更是牵动着每一个人的神经。遗传、双眼视功能不正常、用眼负荷过重等因素都是造成青少年近视的原因,其中,大量的电子产品侵入以及…

MySQL用得好好的,为何要转ES?

MySQL是一种关系型数据库,它可以高效地存储和查询结构化的数据。 ES是一种分布式搜索引擎,它可以快速地对海量的非结构化或半结构化的数据进行全文检索和分析。 MySQL 和 ES 的数据存储方式也不同。MySQL 中的数据通常是以关系型表的形式存储在磁盘上&…

python 列表的操作

增加 # append 在已有的列表末尾插入一个值 list1[张三,李四] list1.append(王二) print(list1)# expand 在已有的列表末尾追加一个列表 list1 [love,peace,keep] list2 [beautiful,string] list1.extend(list2) print(list1)# insert 在指定位置插入一个值list1 [love,peac…

【开源】基于JAVA的农村物流配送系统

项目编号: S 024 ,文末获取源码。 \color{red}{项目编号:S024,文末获取源码。} 项目编号:S024,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2…

SQL注入-HTTP头注入

目录 HTTP Header概述 HTTP Header注入 HTTP Header注入概述 HTTP Header注入实例 HTTP Header概述 HTTP工作原理 HTTP请求方法 HTTP报文类型 请求报文(HTTP Request):由客户端发给服务器的消息,其组成包括请求行(R…

【C++】什么是模板?怎样使用模板?

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.函数模板 1.1函数模板概念 1.2函数…

视频文件+EasyDarwin做摄像机模拟器模拟RTSP流很方便,还能做成系统服务,方法与流程

之前我看到过一家人工智能做算法的企业,用EasyDarwinFFMPEG做了一个摄像机的模拟器,方法大概是: 用ffmpeg读取mp4等类型的视频文件(当然ffmpeg啥都能读取),再以RTSP协议的形式推送给EasyDarwin&#xff1b…