Pipeline aggregations管道聚合-Sibling-1

Pipeline aggregations管道聚合

管道聚合工作于其他聚合产生的输出结果而不是文档集,用于向输出树添加信息
按管道聚集运算来源分类,管道聚集可以分为基于父聚集结果和基于兄弟聚集结果两类。
前者使用父聚集的结果并将运算结果添加到父聚集结果中,后者则使用兄弟聚集的结果并且结果会展示在自己的聚集结果中。

(1)基于父聚集

基于父聚集的管道聚集包括moving_avg、moving_fn、bucket_script、bucket_selector、bucket_sort、derivative、cumulative_sum、serial_diff八种。

(2)基于兄弟聚集

基于兄弟聚集的管道聚集包括avg_bucket、max_bucket、min_bucket、sum_bucket、stats_bucket、extended_ stats_ bucket、percentiles_bucket七种。如果将它们名称中的bucket去除,它们就与之前介绍的部分指标聚集同名了。事实上,它们不仅在名称上接近,而且在功能上也类似,只是聚集运算的范围由整个文档变成了另一个聚集结果。

buckets_path参数

  • buckets_path参数 用于指定访问其他桶中指标值的路径

  • buckets_ path参数的值由三部分组成,即聚集名称、指标名称和分隔符。聚集名称与聚集名称之间的分隔符是“>”,而聚集名称与指标名称之间的分隔符使用“.”。

  • buckets_path 语法

buckets_path Syntax 语法
AGG_SEPARATOR >
METRIC_SEPARATOR .
AGG_NAME
METRIC
MULTIBUCKET_KEY [<KEY_NAME>]
PATH <AGG_NAME><MULTIBUCKET_KEY>? (<AGG_SEPARATOR>, <AGG_NAME> )* ( <METRIC_SEPARATOR>, )

1.Average bucket aggregation 平均桶聚合 ====================================================

  • 同级管道聚合

  • 它计算同级聚合中指定度量的平均值。同级聚合必须是多桶聚合,针对的是度量聚合(metric Aggregation)。

  • 参数
    1.buckets_path 指定聚合的名称,支持多级嵌套聚合。
    2.gap_policy 当管道聚合遇到不存在的值,有点类似于term等聚合的(missing)时所采取的策略,可选择值为:skip、insert_zeros。
    – skip:此选项将丢失的数据视为bucket不存在。它将跳过桶并使用下一个可用值继续计算。
    – insert_zeros:默认使用0代替。
    3.format 用于格式化聚合桶的输出(key)。

  • Response body 反应小组
    value
    value_as_string

计算每月平均销售额:

  • 第一级聚合:sales_per_month,(按月)直方图聚合。

  • 第二级聚合:sales,在按月聚合的基础上,对每个月的文档求sum。

  • 第三级聚合:avg_monthly_sales,对上面的聚合求平均值

  • “buckets_path”: “sales_per_month>sales”
    avg_bucket聚合是想要得到sales_per_month日期直方图聚合中sales聚合值的平均值。
    1.对sales_per_month分组聚合的sales指标作为pipeline aggregations的输入源。
    2.将"sales"中的sum值作为sales_per_month桶聚合的输入
    3.将指向 sales指标值,该值包含在 “sales_per_month” 存储桶聚合中。


POST /sales/_search?size=0
{
   
  "size": 0,
  "aggs": {
   
    "sales_per_month": {
   
      "date_histogram": {
   
        "field": "date",
        "calendar_interval": "month",
        "format": "yyyy-MM"
      },
      "aggs": {
   
        "sales": {
   
          "sum": {
   
            "field": "price"
          }
        }
      }
    },
    "avg_monthly_sales": {
   
      "avg_bucket": {
   
        "buckets_path": "sales_per_month>sales",
        "gap_policy": "skip",
        "format": "#,##0.00;(#,##0.00)"
      }
    }
  }
}

响应结果:

  • aggregations由sales_per_month + avg_monthly_sales组成
  • 1.sales_per_month部分:
    按月份聚合bucket共3个。
    key_as_string 月份
    doc_count 当月的doc数量
    sales.value 当月price的sum值
  • 2.avg_monthly_sales部分:
    value:三个月平均值
{
   
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
   
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
   
    "total" : {
   
      "value" : 16,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
   
    "sales_per_month" : {
   
      "buckets" : [
        {
   
          "key_as_string" : "2022-04",
          "key" : 1648771200000,
          "doc_count" : 2,
          "sales" : {
   
            "value" : 140.0
          }
        },
        {
   
          "key_as_string" : "2022-05",
          "key" : 1651363200000,
          "doc_count" : 2,
          "sales" : {
   
            "value" : 30.0
          }
        },
        {
   
          "key_as_string" : "2022-06",
          "key" : 1654041600000,
          "doc_count" : 12,
          "sales" : {
   
            "value" : 2110.0
          }
        }
      ]
    },
    "avg_monthly_sales" : {
   
      "value" : 760.0,
      "value_as_string" : "760.00"
    }
  }
}

2.Max Bucket Aggregation====================================================

  • 最大值桶聚合所定义的桶包含一组聚合指定度量的最大值,并且同时输出桶的键和值。指定的度量必须是数字并且这个聚合必须是多桶聚合。

计算每月销售总额的最大值:

  • 第一级聚合:sales_per_month,(按月)直方图聚合。

  • 第二级聚合:sales,在按月聚合的基础上,对每个月的文档求sum。

  • 第三级聚合:max_monthly_sales,对上面的聚合求最大值

  • “buckets_path”: “sales_per_month>sales”
    max_bucket聚合想要计算最大值的桶路径,要得到sales_per_month日期直方图中sales聚合的最大值
    1.对sales_per_month分组聚合的sales指标作为pipeline aggregations的输入源。
    2.将"sales"中的sum值作为sales_per_month桶聚合的输入
    3.将指向 sales指标值,该值包含在 “sales_per_month” 存储桶聚合中。

POST /sales/_search?size=0
{
   
  "aggs": {
   
    "sales_per_month": {
   
      "date_histogram": {
   
        "field": "date",
        "calendar_interval": "month",
         "format": "yyyy-MM"
      },
      "aggs": {
   
        "sales": {
   
          "sum": {
   
            "field": "price"
          }
        }
      }
    },
    "max_monthly_sales": {
   
      "max_bucket": {
   
        "buckets_path": "sales_per_month>sales",
        "gap_policy": "skip"
      }
    }
  }
}

响应结果:

  • aggregations 由 sales_per_month + max_monthly_sales 组成
  • 1.sales_per_month部分:
    按月份聚合bucket共3个。
    key_as_string 月份
    doc_count 当月的doc数量
    sales.value 当月price的sum值
  • 2.max_monthly_sales 部分:
    value:三个月总价的最高值
{
   
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
   
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
   
    "total" : {
   
      "value" : 16,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
   
    "sales_per_month" : {
   
      "buckets" : [
        {
   
          "key_as_string" : "2022-04",
          "key" : 1648771200000,
          "doc_count" : 2,
          "sales" : {
   
            "value" : 140.0
          }
        },
        {
   
          "key_as_string" : "2022-05",
          "key" : 1651363200000,
          "doc_count" : 2,
          "sales" : {
   
            "value" : 30.0
          }
        },
        {
   
          "key_as_string" : "2022-06",
          "key" : 1654041600000,
          "doc_count" : 12,
          "sales" : {
   
            "value" : 2110.0
          }
        }
      ]
    },
    "max_monthly_sales" : {
   
      "value" : 2110.0,
      "keys" : [
        "2022-06"
      ]
    }
  }
}

3.Min Bucket Aggregation ====================================================

  • 最小分组聚合所定义的桶包含一组聚合指定度量的最小值,并且同时输出桶的键和值。指定的度量必须是数字型而且这个组聚合必须是多桶聚合。

计算每月销售总额的最小值:

  • 第一级聚合:sales_per_month,(按月)直方图聚合。

  • 第二级聚合:sales,在按月聚合的基础上,对每个月的文档求sum。

  • 第三级聚合:min_monthly_sales,对上面的聚合求最小值

  • “buckets_path”: “sal

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值