Elasticsearch高阶聚合实战:Pipeline Aggregation 用法详解与典型场景全攻略

Elasticsearch高阶聚合实战:Pipeline Aggregation 用法详解与典型场景全攻略

    • 前言
    • [一、什么是 Pipeline Aggregation?](#一、什么是 Pipeline Aggregation?)
      • [1.1 定义](#1.1 定义)
      • [1.2 核心特点](#1.2 核心特点)
      • [1.3 执行流程](#1.3 执行流程)
    • [二、Pipeline Aggregation 分类(两大类)](#二、Pipeline Aggregation 分类(两大类))
      • [2.1 同级管道聚合(Sibling Pipeline)](#2.1 同级管道聚合(Sibling Pipeline))
      • [2.2 父级管道聚合(Parent Pipeline)](#2.2 父级管道聚合(Parent Pipeline))
    • 三、核心语法规则(必须掌握)
      • [3.1 关键参数](#3.1 关键参数)
      • [3.2 语法结构](#3.2 语法结构)
    • 四、高频管道聚合实战(附完整DSL)
      • 场景索引(示例)
      • [4.1 同级管道聚合:avg_bucket(计算桶均值)](#4.1 同级管道聚合:avg_bucket(计算桶均值))
      • [4.2 同级管道聚合:max_bucket(求桶最大值)](#4.2 同级管道聚合:max_bucket(求桶最大值))
      • [4.3 父级管道聚合:derivative(导数/环比)](#4.3 父级管道聚合:derivative(导数/环比))
      • [4.4 父级管道聚合:cumulative_sum(累计求和)](#4.4 父级管道聚合:cumulative_sum(累计求和))
      • [4.5 父级管道聚合:moving_avg(移动平均)](#4.5 父级管道聚合:moving_avg(移动平均))
      • [4.6 高级管道聚合:bucket_script(自定义脚本计算)](#4.6 高级管道聚合:bucket_script(自定义脚本计算))
    • [五、Pipeline Aggregation 典型应用场景(生产高频)](#五、Pipeline Aggregation 典型应用场景(生产高频))
    • [六、Pipeline Aggregation 执行流程图](#六、Pipeline Aggregation 执行流程图)
    • [七、Spring Data Elasticsearch 实现管道聚合](#七、Spring Data Elasticsearch 实现管道聚合)
    • 八、注意事项(避坑指南)
    • 九、总结流程图
    • 总结

|-----------------------------|
| 🌺The Begin🌺点点关注,收藏不迷路🌺 |

前言

在 Elasticsearch 聚合分析场景中,我们经常会遇到基于聚合结果再进行二次计算 的需求,例如:计算各分类平均销量的平均值 、筛选出销售额高于均值的分类、对聚合结果进行导数/累计求和/移动平均等。

普通的聚合(Bucket、Metric)无法实现这类需求,而 Pipeline Aggregation(管道聚合) 正是为此而生------它不直接对文档聚合,而是对其他聚合的结果进行二次加工、计算、处理

本文从核心原理、分类、完整语法、实战案例、典型场景、执行流程全方位讲解,带你彻底掌握 ES 管道聚合,实现复杂数据统计分析。

一、什么是 Pipeline Aggregation?

1.1 定义

管道聚合 是 Elasticsearch 中的二级聚合

  • 输入:其他聚合的结果
  • 输出:新的计算结果
  • 作用:对聚合结果进行数学运算、筛选、排序、预测

1.2 核心特点

  • 基于已有聚合结果计算
  • 不单独访问文档
  • 嵌套在其他聚合内部使用
  • 支持:平均、求和、导数、移动平均、差值、筛选等

1.3 执行流程

文档数据
一级聚合:Bucket/Metric
输出聚合结果
Pipeline聚合:二次计算
输出最终统计结果


二、Pipeline Aggregation 分类(两大类)

2.1 同级管道聚合(Sibling Pipeline)

  • 作用于同一级的聚合结果
  • 输出一个新的同级聚合
  • 典型:avg_bucketsum_bucketmax_bucketmin_bucket

2.2 父级管道聚合(Parent Pipeline)

  • 作用于父聚合中的每一项
  • 输出嵌入到父聚合内部的结果
  • 典型:derivative(导数)、cumulative_sum(累计求和)、moving_avg(移动平均)

三、核心语法规则(必须掌握)

3.1 关键参数

  • buckets_path:指向目标聚合的路径(核心)
  • gap_policy:空值策略
  • format:输出格式

3.2 语法结构

json 复制代码
{
  "aggs": {
    "一级聚合名称": {
      "terms": { "field": "分类字段" },
      "aggs": {
        "指标聚合": { "sum": { "field": "数字字段" } },
        "管道聚合名称": {
          "管道类型": {
            "buckets_path": "指标聚合"
          }
        }
      }
    }
  }
}

四、高频管道聚合实战(附完整DSL)

场景索引(示例)

索引:sales

字段:category(分类)、amount(销售额)、date(日期)


4.1 同级管道聚合:avg_bucket(计算桶均值)

需求 :先按商品分类分组统计销售额 → 再计算所有分类销售额的平均值

json 复制代码
GET /sales/_search
{
  "size": 0,
  "aggs": {
    "group_by_category": {
      "terms": { "field": "category.keyword" },
      "aggs": {
        "total_amount": { "sum": { "field": "amount" } }
      }
    },
    "avg_category_amount": {
      "avg_bucket": {
        "buckets_path": "group_by_category>total_amount"
      }
    }
  }
}

效果:返回所有分类销售额的平均值。


4.2 同级管道聚合:max_bucket(求桶最大值)

json 复制代码
"max_category_amount": {
  "max_bucket": {
    "buckets_path": "group_by_category>total_amount"
  }
}

4.3 父级管道聚合:derivative(导数/环比)

需求 :按天统计销售额 → 计算每日环比增量

json 复制代码
GET /sales/_search
{
  "size": 0,
  "aggs": {
    "group_by_date": {
      "date_histogram": {
        "field": "date",
        "calendar_interval": "day"
      },
      "aggs": {
        "daily_amount": { "sum": { "field": "amount" } },
        "daily_diff": {
          "derivative": {
            "buckets_path": "daily_amount"
          }
        }
      }
    }
  }
}

4.4 父级管道聚合:cumulative_sum(累计求和)

需求 :按天统计销售额 → 计算累计销售额

json 复制代码
"cumulative_amount": {
  "cumulative_sum": {
    "buckets_path": "daily_amount"
  }
}

4.5 父级管道聚合:moving_avg(移动平均)

需求 :7日移动平均,用于趋势预测、平滑波动

json 复制代码
"moving_avg_amount": {
  "moving_avg": {
    "buckets_path": "daily_amount",
    "window": 7,
    "model": "simple"
  }
}

4.6 高级管道聚合:bucket_script(自定义脚本计算)

需求:自定义公式计算,如:销售额 * 0.8

json 复制代码
"profit_amount": {
  "bucket_script": {
    "buckets_path": {
      "total": "total_amount"
    },
    "script": "params.total * 0.8"
  }
}

五、Pipeline Aggregation 典型应用场景(生产高频)

场景1:整体统计分析

  • 计算所有部门薪资的平均值
  • 计算各地区订单量总和、最大值、最小值
  • 计算分类销量的均值/总和

场景2:时间序列数据分析(最常用)

  • 日环比、周环比、月环比(derivative)
  • 累计销售额、累计用户量(cumulative_sum)
  • 移动平均、趋势预测(moving_avg)

场景3:数据监控与告警

  • 筛选出超过平均值的异常指标
  • 监控流量突增(导数监控)
  • 计算同比/环比波动

场景4:复杂指标计算

  • 毛利率、利润率
  • 转化率、复购率
  • 自定义公式指标(bucket_script)

场景5:报表与可视化

  • Kibana 可视化图表
  • 运营报表、大屏数据
  • 业务趋势分析

六、Pipeline Aggregation 执行流程图

原始文档
分桶聚合 Terms/DateHistogram
指标聚合 Sum/Avg/Count
Pipeline聚合二次计算
Avg/Max/Derivative/MovingAvg
返回最终聚合结果


七、Spring Data Elasticsearch 实现管道聚合

java 复制代码
NativeSearchQuery query = new NativeSearchQueryBuilder()
    .withAggregation(
        AggregationBuilders.terms("group_by_category")
            .field("category.keyword")
            .subAggregation(AggregationBuilders.sum("total_amount").field("amount"))
    )
    .withAggregation(
        AggregationBuilders.avgBucket("avg_amount", "group_by_category>total_amount")
    )
    .build();

SearchHits<Sales> hits = template.search(query, Sales.class);

八、注意事项(避坑指南)

  1. 必须依赖已有聚合,不能单独使用
  2. buckets_path 路径必须正确
    • 同级:聚合名>子聚合名
    • 父级:直接写子聚合名
  3. 管道聚合无法再被其他管道聚合直接使用
  4. 空桶使用 gap_policy 处理
  5. 大量数据下,移动平均、导数等计算会消耗性能

九、总结流程图



业务统计需求
是否需要二次计算
使用Pipeline聚合
使用普通聚合
Sibling:同级统计 avg/max
Parent:时序统计 环比/累计/移动平均
报表/整体分析
监控/趋势/预测

总结

Pipeline Aggregation(管道聚合) 是 Elasticsearch 实现复杂统计分析 的核心能力,一句话总结:
对聚合结果再聚合,实现二级计算。

核心价值

  • 实现桶级别的数学运算
  • 支持时间序列环比、累计、趋势
  • 满足复杂业务指标、监控大屏、运营报表
  • 是 ES 高阶数据分析必备技能

最常用场景

✅ 分类统计的平均值/总和/最大/最小值

✅ 日环比、周环比、月环比

✅ 累计销售额、累计用户

✅ 移动平均、趋势预测

✅ 自定义指标公式计算

掌握管道聚合,你就能轻松实现企业级数据分析、监控、报表功能!


|---------------------------|
| 🌺The End🌺点点关注,收藏不迷路🌺 |

相关推荐
风落无尘17 小时前
《智能重生:从垃圾堆到AI工程师》——第二章 概率与生存
大数据·人工智能
档案宝档案管理17 小时前
无缝对接财务软件,实现会计档案全流程自动化流转
大数据
juniperhan18 小时前
Flink 系列第21篇:Flink SQL 函数与 UDF 全解读:类型推导、开发要点与 Module 扩展
java·大数据·数据仓库·分布式·sql·flink
科研前沿18 小时前
2026 数字孪生前沿科技:全景迭代报告 —— 镜像视界生成式孪生(Generative DT)技术白皮书
大数据·人工智能·科技·算法·音视频·空间计算
Elastic 中国社区官方博客18 小时前
Elastic-caveman : 在不损失 Elastic 最佳效果的情况下,将 AI 响应 tokens 减少64%
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索
互联网推荐官18 小时前
上海软件定制开发全流程拆解:需求分析、技术选型与交付管理的工程实践
大数据·数据库·需求分析
samFuB19 小时前
【数据集】分省农林牧渔总产值、农业总产值数据(2007-2024年)
大数据
云天AI实战派19 小时前
AI 智能体问题排查指南:ChatGPT、API 调用到 Agent 上线失灵的全流程修复手册
大数据·人工智能·python·chatgpt·aigc
m0_4665252920 小时前
酷特AGI:从“自家试验田”到“全球输出”
大数据·人工智能·agi