【发布时间】:2015-09-10 10:36:45
【问题描述】:
我试图理解 ElasticSearch 中过滤器聚合的语法,但我很困惑。文档中给出的示例是这样的:
{
"aggs" : {
"messages" : {
"filters" : {
"filters" : {
"errors" : { "term" : { "body" : "error" }},
"warnings" : { "term" : { "body" : "warning" }}
}
},
"aggs" : {
"monthly" : {
"histogram" : {
"field" : "timestamp",
"interval" : "1M"
}
}
}
}
}
}
我了解以下内容:
- “aggs”定义聚合块(它是“聚合”的快捷方式)。可以看出,示例中实际上存在嵌套聚合。
- “messages”是用户自定义的聚合块名称。
- “errors”和“warnings”是用户定义的过滤器名称,用于为聚合创建“桶”。他们丢弃“body”分别等于“error”和“warning”的项目(“term”匹配)。
我不明白为什么“过滤器”出现两次,嵌套在自身内部。根据一般聚合语法:
"aggregations" : {
"<aggregation_name>" : {
"<aggregation_type>" : {
<aggregation_body>
}
[,"aggregations" : { [<sub_aggregation>]+ } ]?
}
[,"<aggregation_name_2>" : { ... } ]*
}
- “aggs”是“聚合”的缩写
- “消息”是我的“
- “过滤器”是“”
第二个“过滤器”元素在做什么?并且在哪里记录了“过滤器”必须是自嵌套的?我正在学习的任何其他聚合似乎都不是这种情况。
感谢您的解释!
【问题讨论】:
标签: json elasticsearch