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

Elasticsearch 聚合查询(Aggregation)详解

Elasticsearch中的聚合查询,类似SQL的SUM/AVG/COUNT/GROUP BY分组查询,主要用于统计分析场景。

实例:

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.*;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.aggregations.metrics.Avg;
import org.elasticsearch.search.builder.SearchSourceBuilder;import java.io.IOException;public class Main {public static void main(String[] args) throws IOException {// 首先创建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对象, 设置查询索引名=orderSearchRequest searchRequest = new SearchRequest("order");// 通过SearchSourceBuilder构建搜索参数SearchSourceBuilder builder = new SearchSourceBuilder();// 通过QueryBuilders构建ES查询条件,这里查询所有文档,复杂的查询语句设置请参考前面的章节。builder.query(QueryBuilders.matchAllQuery());// 创建terms桶聚合,聚合名字=by_shop, 字段=shop_id,根据shop_id分组TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("by_shop").field("shop_id");// 嵌套聚合// 设置Avg指标聚合,聚合名字=avg_price, 字段=price,计算平均价格aggregationBuilder.subAggregation(AggregationBuilders.avg("avg_price").field("price"));// 设置聚合查询builder.aggregation(aggregationBuilder);// 设置搜索条件searchRequest.source(builder);// 如果只想返回聚合统计结果,不想返回查询结果可以将分页大小设置为0builder.size(0);// 执行ES请求SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);// 处理聚合查询结果Aggregations aggregations = searchResponse.getAggregations();// 根据by_shop名字查询terms聚合结果Terms byShopAggregation = aggregations.get("by_shop");// 遍历terms聚合结果for (Terms.Bucket bucket  : byShopAggregation.getBuckets()) {// 因为是根据shop_id分组,因此可以直接将桶的key转换成int类型int shopId = bucket.getKeyAsNumber().intValue();// 根据avg_price聚合名字,获取嵌套聚合结果Avg avg = bucket.getAggregations().get("avg_price");// 获取平均价格double avgPrice = avg.getValue();}// 关闭ES Clientclient.close();}
}

例子聚合统计的效果等价SQL:

select shop_id, avg(price) as avg_price from order group by shop_id

相关文章:

  • k8s中pod的hostport端口突然无法访问故障处理
  • ArcGIS中如何建立土地利用规划数据库
  • 【算法心得】When data range not large, try Bucket sort
  • 【Linux基础】Linux常见指令总结及周边小知识
  • 02-鸿蒙学习之4.0todoList练习
  • PTA: 螺旋矩阵
  • 计算机毕业设计 基于微信小程序的“共享书角”图书借还管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 9.Docker的虚悬镜像-Dangling Image
  • 爬虫爬取百度图片、搜狗图片
  • cocos2dx ​​Animate3D (一)
  • Java面试-微服务篇-SpringCloud
  • Python语言学习笔记之三(字符编码)
  • 独乐乐不如众乐乐(二)-某汽车零部件厂商IC EMC企业规范
  • 【leetcode】62. 不同路径
  • Flask Session 登录认证模块
  • [NodeJS] 关于Buffer
  • 【个人向】《HTTP图解》阅后小结
  • 4. 路由到控制器 - Laravel从零开始教程
  • Javascript Math对象和Date对象常用方法详解
  • js作用域和this的理解
  • JWT究竟是什么呢?
  • MQ框架的比较
  • node 版本过低
  • Objective-C 中关联引用的概念
  • php的插入排序,通过双层for循环
  • spring boot 整合mybatis 无法输出sql的问题
  • webgl (原生)基础入门指南【一】
  • 安装python包到指定虚拟环境
  • ------- 计算机网络基础
  • 简单数学运算程序(不定期更新)
  • 排序算法之--选择排序
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端之React实战:创建跨平台的项目架构
  • 如何胜任知名企业的商业数据分析师?
  • 你对linux中grep命令知道多少?
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 回归生活:清理微信公众号
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (003)SlickEdit Unity的补全
  • (C)一些题4
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (第一天)包装对象、作用域、创建对象
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (算法)N皇后问题
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)【Hibernate总结系列】使用举例
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • ./configure,make,make install的作用(转)