# 嵌套与管道聚合

URL: https://caijiao.org/elasticsearch/03.advanced/10.agg-nested-pipeline
Source: docs/elasticsearch/03.advanced/10.agg-nested-pipeline.md
Description: 本章介绍 Elasticsearch 中嵌套聚合与管道聚合的使用方法，帮助实现多层次数据分析和基于聚合结果的计算。

Elasticsearch 支持多级嵌套聚合和基于聚合结果的管道聚合，能够完成复杂的数据统计和进一步的结果处理。

## 1. 嵌套聚合（Nested Aggregation）

通过在桶聚合内部嵌套其他聚合，实现多维度、多层次的数据分组统计。

### 示例：按类别分组后统计平均价格

```json
GET /my-index/_search
{
  "size": 0,
  "aggs": {
    "by_category": {
      "terms": {
        "field": "category.keyword"
      },
      "aggs": {
        "average_price": {
          "avg": {
            "field": "price"
          }
        }
      }
    }
  }
}
````

## 2. 管道聚合（Pipeline Aggregation）

基于已有聚合结果进行进一步计算，如计算差值、移动平均等。

### 示例：计算销售额月环比增长率

```json
GET /my-index/_search
{
  "size": 0,
  "aggs": {
    "sales_over_time": {
      "date_histogram": {
        "field": "sale_date",
        "calendar_interval": "month"
      },
      "aggs": {
        "monthly_sales": {
          "sum": {
            "field": "sales"
          }
        },
        "sales_derivative": {
          "derivative": {
            "buckets_path": "monthly_sales"
          }
        }
      }
    }
  }
}
```

## 3. 常见管道聚合类型

* `derivative`：计算相邻桶的差值
* `moving_avg`：移动平均
* `cumulative_sum`：累积和
* `bucket_script`：基于脚本的自定义计算

## 4. 注意事项

* 管道聚合依赖于父聚合的结果，需合理设计嵌套结构
* 管道聚合无法直接作用于文档，需要先聚合形成桶
* 使用管道聚合时要关注性能影响，避免复杂计算阻塞查询

---

掌握嵌套与管道聚合，能帮助你构建复杂多维的数据分析模型，实现精准业务洞察。
