首页 >> 大全

Elasticsearch:Bucket script 聚合

2023-11-25 大全 30 作者:考证青年

聚合是一个父管道( )聚合,它执行一个脚本,该脚本可以对父多桶聚合中的指定指标执行每个桶的计算。 指定的指标必须是数字,并且脚本必须返回一个数值。有关 聚合的内容,你可以阅读文章 “: 介绍”。

聚合

用法

单独的 聚合看起来像这样:

{"bucket_script": {"buckets_path": {"my_var1": "the_sum",                     "my_var2": "the_value_count"},"script": "params.my_var1 / params.my_var2"}
}

这里, 是要在脚本中使用的存储桶路径的变量名称, 是要用于该变量的指标的路径。

参数说明 参数名称描述强制要求默认值

为此聚合运行的脚本。 该脚本可以是内联的、文件的或索引的。 (有关详细信息,请参阅脚本)

必须

脚本变量的映射及其到我们希望用于变量的存储桶的关联路径(有关更多详细信息,请参见 语法)

必须

在数据中发现差距时应用的策略(有关详细信息,请参阅处理数据中的差距)

可选

skip

输出值的 模式。 如果指定,则在聚合的 属性中返回格式化的值

可选

null

在以下的展示中,我使用 Stack 8.4.3 来进行展示。

示例

为了说明问题的方便,我们来使用一个示例来进行详细说明。我将使用 自带的 索引进行展示。我们的目的是:找出每天销售的 Men's 这个类别的销售额在总体销售额中的比例。

在本练习中,我们使用 自带的一个例子来进行展示:

这样我能就在 中创建了一个叫做 的索引。这个一个 的数据。我们可以在 中进行查看:

如上所示,上面的数据展示的是从 10 月 20 号到 10 月 31 号的数据。

我们可以使用 Lens 来展示每天的文档数:

聚合物__聚合支付

如上所示,每天都有一定数量的文档。上面的聚合相当于如下的命令:

GET kibana_sample_data_ecommerce/_search
{"size": 0,"aggs": {"sales_per_day": {"date_histogram": {"field": "order_date","calendar_interval": "day"}}}
}

上面的聚合返回如下的数据:

我们可以通过如下的命令来得到每天的总销售额:

GET kibana_sample_data_ecommerce/_search?filter_path=aggregations
{"size": 0,"aggs": {"sales_per_day": {"date_histogram": {"field": "order_date","calendar_interval": "day"},"aggs": {"total_sales": {"sum": {"field": "products.base_price"}}}}}
}

如上所示,我们求出了每天销售的总额。为了能够求出每天卖出的 Men's 这个类别的总额,我们可以使用另外一个叫做 的聚合:

GET kibana_sample_data_ecommerce/_search?filter_path=aggregations
{"size": 0,"aggs": {"sales_per_day": {"date_histogram": {"field": "order_date","calendar_interval": "day"},"aggs": {"total_sales": {"sum": {"field": "products.base_price"}},"man's_clothing": {"filter": {"term": {"category.keyword": "Men's Clothing"}},"aggs": {"sales": {"sum": {"field": "products.base_price"}}}}}}}
}

如上所示,我们至此求出了 Men's 这个类别的每天的销售总额。

我们接下来使用 聚合来求出每天的 Men's 这个类别的总额和当天销售总额的百分比:

GET kibana_sample_data_ecommerce/_search?filter_path=aggregations
{"size": 0,"aggs": {"sales_per_day": {"date_histogram": {"field": "order_date","calendar_interval": "day"},"aggs": {"total_sales": {"sum": {"field": "products.base_price"}},"man's_clothing": {"filter": {"term": {"category.keyword": "Men's Clothing"}},"aggs": {"sales": {"sum": {"field": "products.base_price"}}}},"man's_clothing_percentage": {"bucket_script": {"buckets_path": {"mans_clothing": "man's_clothing>sales","total_sales": "total_sales"},"script": "params.mans_clothing / params.total_sales * 100"}}}}}
}

在上面的man'e 聚合中,它使用了其它聚合的结果并算出新的聚合的值。这种聚合被称之为 聚合。特别需要指出的是man'>sales 不是布尔比较大小的算式,而是引用聚合值的路径。

如上所示,我们可以看到每天的 Men's 的销售额的百分比。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了