返回 深入了解
示例:
剖析管道聚合:Elasticsearch 入门系列指南(六)
后端
2023-11-07 15:30:17
Elasticsearch 管道聚合是一个强大的工具,它允许你在聚合结果的基础上进行进一步的计算。这使你能够将复杂的聚合操作分解为更小的、可管理的部分,并创建更精细、更有意义的报告。
管道聚合简介
管道聚合通过应用一系列转换和计算来修改聚合结果。这类似于在 SQL 中使用 SELECT 语句之后应用额外的函数。它允许你根据需要对数据执行更高级别的分析。
管道聚合有两种主要类型:
- 桶聚合: 用于聚合桶中的文档,例如求和、平均值或最大值。
- 指标聚合: 用于聚合文档中的特定字段,例如求和、平均值或最小值。
深入了解 buckets_path
buckets_path
是管道聚合中一个重要的参数,它指定要从聚合结果中提取字段的路径。它使用点号分隔符来表示嵌套字段,例如:
buckets_path: "nested_object.field_name"
这将从嵌套对象 nested_object
中提取 field_name
字段。
buckets_path
语法
buckets_path
语法允许使用以下修饰符:
<field_name>
:要提取的字段名称。<nested_object>.<field_name>
:从嵌套对象中提取字段。*
:匹配所有字段。?
:可选字段。+
:要求字段存在。
示例:buckets_path
的实际应用
考虑以下聚合查询,该查询对 logs
索引中的文档按 level
字段聚合:
{
"aggs": {
"logs_by_level": {
"terms": {
"field": "level"
}
}
}
}
结果将包含 error
、warn
、info
和 debug
级别中的桶。要计算每个级别的日志数,我们可以使用管道聚合:
{
"aggs": {
"logs_by_level": {
"terms": {
"field": "level"
},
"aggs": {
"total_logs": {
"bucket_script": {
"buckets_path": {
"total_logs": "_count"
},
"script": "params.total_logs"
}
}
}
}
}
}
此聚合查询使用 buckets_path
从 _count
聚合中提取 total_logs
字段,该聚合计算每个桶中的文档数。结果将包含包含 total_logs
字段的 logs_by_level
聚合桶。
结论
管道聚合是 Elasticsearch 中一个强大的工具,它允许你创建复杂、有意义的报告。通过理解 buckets_path
等重要参数,你可以充分利用此功能,并从你的数据中提取有价值的见解。