ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# Bucket Script Aggregation(桶脚本聚合) 警告 此功能是实验性的,可能会在未来的版本中完全更改或删除。Elastic将采取最大的努力来解决任何问题,但实验功能不受SLA官方功能的支持。 父级管道聚合,它执行一个脚本,它可以在父级多桶聚合中指定度量参数执行每个桶计算。指定的度量必须是数字,脚本必须返回一个数值。 ## Syntax(语法) bucket_script聚合看起来像这样: ``` { "bucket_script": { "buckets_path": { "my_var1": "the_sum", #1 "my_var2": "the_value_count" }, "script": "params.my_var1 / params.my_var2" } } ``` | 1 | 这里,my_var1是这个桶的路径中使用脚本中的变量的名字,the_sum是路径的度量所使用的变量。 | ## Table 11. `bucket_script` Parameters(Table 11.bucket_script参数) | 参数名称 | 描述 | 是否必要 | 默认值 | | --- | --- | --- | --- | | `script` | 在这个聚合上运行的脚本。这个脚本可以是内置的,文件或索引。(详细信息,请查阅Scripting) | 必须 |   | | `buckets_path` | 脚本变量的映射,以及我们希望用于桶的变量的相关路径(相关详细信息,请参阅“buckets_path Syntax”一节) | 必须 |   | | `gap_policy` | 在数据中找到差异时应用的策略(相关详情,请参阅“Dealing with gaps in the data”一节) | 可选 | `skip` | | `format` | 应用于此聚合的输出值的格式 | 可选 | `null` | 以下代码计算了T恤销售额与每月销售额的比例: ``` POST /sales/_search { "size": 0, "aggs" : { "sales_per_month" : { "date_histogram" : { "field" : "date", "interval" : "month" }, "aggs": { "total_sales": { "sum": { "field": "price" } }, "t-shirts": { "filter": { "term": { "type": "t-shirt" } }, "aggs": { "sales": { "sum": { "field": "price" } } } }, "t-shirt-percentage": { "bucket_script": { "buckets_path": { "tShirtSales": "t-shirts>sales", "totalSales": "total_sales" }, "script": "params.tShirtSales / params.totalSales * 100" } } } } } } ``` 以下是响应信息: ``` { "took": 11, "timed_out": false, "_shards": ..., "hits": ..., "aggregations": { "sales_per_month": { "buckets": [ { "key_as_string": "2015/01/01 00:00:00", "key": 1420070400000, "doc_count": 3, "total_sales": { "value": 550.0 }, "t-shirts": { "doc_count": 1, "sales": { "value": 200.0 } }, "t-shirt-percentage": { "value": 36.36363636363637 } }, { "key_as_string": "2015/02/01 00:00:00", "key": 1422748800000, "doc_count": 2, "total_sales": { "value": 60.0 }, "t-shirts": { "doc_count": 1, "sales": { "value": 10.0 } }, "t-shirt-percentage": { "value": 16.666666666666664 } }, { "key_as_string": "2015/03/01 00:00:00", "key": 1425168000000, "doc_count": 2, "total_sales": { "value": 375.0 }, "t-shirts": { "doc_count": 1, "sales": { "value": 175.0 } }, "t-shirt-percentage": { "value": 46.666666666666664 } } ] } } } ``` 原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-bucket-script-aggregation.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-bucket-script-aggregation.html)(修改该链接为官网对应的链接) 译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=10030393](http://www.apache.wiki/pages/viewpage.action?pageId=10030393)(修改该链接为 **ApacheCN** 对应的译文链接) 贡献者 : [曾少峰](/display/~zengshaofeng),[ApacheCN](/display/~apachecn),[Apache中文网](/display/~apachechina)