桶选择器聚合
bucket_selector
聚合是一个父管道聚合,它通过评估脚本来确定 histogram
(或 date_histogram
)聚合返回的桶是否应包含在最终结果中。
与创建新值的管道聚合不同,bucket_selector
聚合充当过滤器,根据指定的标准保留或删除整个桶。使用此聚合可以根据桶的计算指标来筛选桶。
参数
bucket_selector
聚合支持以下参数。
参数 | 必需/可选 | 数据类型 | 描述 |
---|---|---|---|
buckets_path | 必需 | 对象 | 变量名到桶化指标的映射,用于标识脚本中要使用的指标。指标必须是数值类型。参见脚本变量。 |
script(脚本) | 必需 | 字符串或对象 | 要执行的脚本。可以是内联脚本、存储脚本或脚本文件。脚本可以访问 buckets_path 参数中定义的变量名。必须返回一个布尔值。返回 false 的桶将从最终输出中移除。 |
gap_policy | 可选 | 字符串 | 应用于缺失数据的策略。有效值为 skip 和 insert_zeros 。默认为 skip 。参见数据间隙。 |
示例
以下示例使用 OpenSearch Dashboards 电子商务样本数据创建一个日期直方图,间隔为一周。sum
子聚合计算每周的所有销售额总和。最后,bucket_selector
聚合筛选出结果周桶,移除所有总和不超过 $75,000 的桶。
GET opensearch_dashboards_sample_data_ecommerce/_search
{
"size": 0,
"aggs": {
"sales_per_week": {
"date_histogram": {
"field": "order_date",
"calendar_interval": "week"
},
"aggs": {
"weekly_sales": {
"sum": {
"field": "taxful_total_price",
"format": "$#,###.00"
}
},
"avg_vendor_spend": {
"bucket_selector": {
"buckets_path": {
"weekly_sales": "weekly_sales"
},
"script": "params.weekly_sales > 75000"
}
}
}
}
}
}
示例响应
该聚合返回符合脚本条件的 sales_per_week
桶。
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 4675,
"relation": "eq"
},
"max_score": null,
"hits": []
},
"aggregations": {
"sales_per_week": {
"buckets": [
{
"key_as_string": "2025-03-31T00:00:00.000Z",
"key": 1743379200000,
"doc_count": 1048,
"weekly_sales": {
"value": 79448.60546875,
"value_as_string": "$79,448.61"
}
},
{
"key_as_string": "2025-04-07T00:00:00.000Z",
"key": 1743984000000,
"doc_count": 1048,
"weekly_sales": {
"value": 78208.4296875,
"value_as_string": "$78,208.43"
}
},
{
"key_as_string": "2025-04-14T00:00:00.000Z",
"key": 1744588800000,
"doc_count": 1073,
"weekly_sales": {
"value": 81277.296875,
"value_as_string": "$81,277.30"
}
}
]
}
}
}
因为它返回的是布尔值而不是数值,所以 buckets_selector
聚合不接受 format
参数。在此示例中,格式化的指标通过 sum
子聚合在 value_as_string
结果中返回。将其与 bucket_script
聚合中的示例进行对比。