IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> es AggregationBuilders 聚合查询 -> 正文阅读

[大数据]es AggregationBuilders 聚合查询


在项目中遇到一块关于es的多条件聚合的代码,如下:

AggregationBuilders
.terms(“agg_name”)
.field(“name”)
.size(Integer.MAX_VALUE)
.subAggregation(AggregationBuilders
.topHits(“top”)
.sort(“time”,SortOrade.DESC)
.from(0).size())

读的时候不是很理解,因此对多条件聚合进行一下系统学习。

聚合的分类

聚合(aggregations)可以实现对文档数据的统计、分析、运算。聚合常见的有三类:

  • 桶(Bucket)聚合:用来对文档做分组
    * TermAggregation: 按照文档字段分组
    * Date Histogram: 按照日期阶梯分组,例如一周为一组,或者一个月为一组。
  • 度量(Metric)聚合:用以计算一些值,比如:最大、最小、平均值等。
    * Avg:求平均值
    * Max:求最大值
    * Min:求最小值
    * Stats: 同时求max、min、avg、sum等
  • 管道(pipeline)聚合:其他聚合的结果为基础再对其进行聚合

DSL语言实现Bucket聚合

在es中的一个索引中,存储着各种酒店信息。现在需要统计所有数据中的酒店品牌有几种。酒店数据如下:

此时可以根据酒店品牌的名称做聚合:可以看出类型为term类型,DSL示例如下:
其中的主要字段是brandAgg、terms,field,指定了聚合名称、聚合类型和聚合字段
在这里插入图片描述
查询的结果如下:
在这里插入图片描述
结果中可以看到,一般查询的hits数组为空,因为上面的size指定为0了。聚合查询的结果在aggregations下:其中的"brandAgg"字段为聚合名称"buckets"为聚合结果
在这里插入图片描述
这样就使用DSL完成了一次简单的聚合查询,但是这样的简单聚合每次都是对所有数据全部聚合,如果索引库中的数据量太大,效率也会降低。通常会对聚合的文档限定范围,可以在query中限定范围,比如查询价格200元以下的酒店名称:DSL如下:

在这里插入图片描述
从上面的DSL中可以看出,"query"和"aggs"字段同级,"query"的主要作用是限定聚合的文档范围。并且可以总结出聚合配置的属性有:

  • size:指定聚合结果数量
  • order:指定聚合结果排序方式
  • field:指定聚合字段

DSL实现Metrics聚合(结合Bucket)

还是在上述的例子下,要求获取每个品牌的用户评分的min、mix、avg等数据,可以使用"stats"
在这里插入图片描述
上面的DSL就是一个简单的多条件聚合了,可以看到是对品牌进行聚合后,再对其进行操作,形成一个新的聚合"score_stats",下面是操作的结果。
在这里插入图片描述
在buckets下,“key"为第一步聚合的结果,它的下面是第二步聚合生成的"scoreAgg”,内容是对score的计算。

接下来我们使用java中的restClient对上面的查询操作一下:

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章           查看所有文章
加:2022-02-19 01:14:20  更:2022-02-19 01:17:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:31:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码