java elasticsearch 桶聚合(bucket)

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

********************************************** 未完待续 *******************************************************

相关推荐
AlexMercer10122 分钟前
【C++】二、数据类型 (同C)
c语言·开发语言·数据结构·c++·笔记·算法
Jarlen3 分钟前
将本地离线Jar包上传到Maven远程私库上,供项目编译使用
java·maven·jar
friklogff3 分钟前
【无标题】云端之C#:全面解析6种云服务提供商的SDK
开发语言·flask·c#
蓑 羽8 分钟前
力扣438 找到字符串中所有字母异位词 Java版本
java·算法·leetcode
Reese_Cool16 分钟前
【C语言二级考试】循环结构设计
android·java·c语言·开发语言
海里真的有鱼17 分钟前
Spring Boot 项目中整合 RabbitMQ,使用死信队列(Dead Letter Exchange, DLX)实现延迟队列功能
开发语言·后端·rabbitmq
txtsteve19 分钟前
es由一个集群迁移到另外一个集群es的数据迁移
大数据·elasticsearch·搜索引擎
工作中的程序员21 分钟前
ES 索引或索引模板
大数据·数据库·elasticsearch
zxctsclrjjjcph33 分钟前
【C语言】常见的C语言概念
c语言·开发语言