ElasticSearch聚合分析

本文深入解析ElasticSearch的聚合分析功能,探讨其实时高效的数据统计特性,包括Bucket、Metric及Pipeline聚合的运用,展示如何通过简单语句获取复杂分析结果,提升数据分析效率。

ElasticSearch 聚合分析分析

什么是聚合(Aggregation)

  • ElasticSearch 除了搜索以外,提供的针对 ES 数据进行统计分析的功能
    • 实时性高,Hadoop (有可能T+1)
  • 通过聚合,我们会得到一个数据的概览,是分析和总结全套的数据,而不是寻找单个文档
    • 尖沙咀和香港岛的客房数量
    • 不同价格区间,可预订的经济型酒店和五星级酒店的数量
  • 高性能,只需要一条语句,就可以从 ElasticSearch 得到分析结果
    • 无需在客户端自己去实现分析逻辑

聚合的分类

  • Bucket Aggregation : 一些列满足特定条件的文档的集合 (group by)
  • Metric Aggregation : 一些数学运算,可以对文档字段进行统计分析 (sum(),count(),avg())
  • Pipeline Aggregation : 对其他的聚合结果进行二次聚合
  • Matrix Aggregation : 支持对多个字段的操作并提供一个结果矩阵

Bucket

在这里插入图片描述

  • 一些例子:

    • 杭州属于浙江 / 把用户分为 男性 / 女性
    • 嵌套关系 : 杭州 属于浙江 属于 中国 属于亚洲
  • ElasticSearch 提供了很多类型的 Bucket,帮助你用多种方式划分文档

    • Term & Range (时间 / 年龄区间 / 地理位置)

查看航班目的地的统计信息

GET kibana_sample_data_flights/_search
{
  "size":0,  
  "aggs":{
    "flight_dest":{
      "terms":{
        "field":"DestCountry"  # 按照字段DestCountry的Terms 进行分桶
      }
    }
  }
}

在这里插入图片描述

嵌套

查看航班的目的地统计信息,平均票价,以及天气情况统计(相当于两次group by)

GET kibana_sample_data_flights/_search
{
  "size":0,
  "aggs":{
    "flight_dest":{
      "terms":{
        "field": "DestCountry"
      },
      "aggs": {
        "avg_price": {
          "avg": {
            "field": "AvgTicketPrice"
          }
        },
        "weather":{
          "terms": {
            "field": "DestWeather"
          }
        }
      }
    }
  }
}

返回结果:
在这里插入图片描述

Metric (运算)

  • Metric 会基于数据集计算结果,除了支持在字段上进行计算,同样也支持在脚本 (painless scirpt) 产生的结果之上进行计算
  • 大多数 Metric 是数学计算,仅输出一个值
    • min / max / sum / avg / cardinality
  • 部分 Metric 支持输出多个数值
    • stats(统计,同时输出min,max,avg) /
    • percentiles (百分位数)/ percentile_ranks

查看航班目的地的统计信息,均价,最高最低价
在这里插入图片描述
返回结果:
在这里插入图片描述

### Elasticsearch 聚合分析教程 #### 使用桶聚合进行数据分组统计 Elasticsearch 提供了丰富的聚合功能来处理和分析存储的数据。其中,桶聚合是用于对数据集按照某些条件进行分割的一种方式[^1]。 对于想要统计不同品牌商品的数量这一需求来说,`terms` 是最常用的桶聚合类型之一: ```json GET /sales/_search { "size": 0, "aggs": { "brand_counts": { "terms": { "field": "brand" } } } } ``` 这段代码会返回各个品牌的销售记录数,并按品牌名称分类显示出来。 #### 应用日期直方图聚合查看时间序列变化 当涉及到基于时间维度的数据分布情况时,则可采用 `date_histogram` 来创建一段时间范围内的频率图表[^4]。 下面的例子展示了如何获取过去一年内每天的商品销量概况: ```json GET /sales/_search { "size": 0, "query": { "range": { "sale_date": { "gte": "now-1y", "lt": "now" } } }, "aggs": { "daily_sales": { "date_histogram": { "field": "sale_date", "calendar_interval": "day" } } } } ``` 此请求将根据每一天的时间戳字段 `sale_date` 对文档进行汇总计数,从而形成每日销售额的变化曲线。 #### 结合多个聚合函数深入挖掘信息价值 除了简单的分组外,还可以进一步应用其他类型的聚合操作(如求平均值、总和等),以获得更加全面的信息洞察力[^2]。 例如,在上面的基础上增加一个子聚合用来计算每个时间段内的平均价格: ```json GET /sales/_search { "size": 0, "query": { "range": { "sale_date": { "gte": "now-1y", "lt": "now" } } }, "aggs": { "daily_sales": { "date_histogram": { "field": "sale_date", "calendar_interval": "day" }, "aggs": { "average_price": { "avg": { "field": "price" } } } } } } ``` 这样就可以得到既有关于总量又有单件产品均价的趋势视图了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值