我试图理解ElasticSearch中过滤器聚合的语法,我被难住了。文档中给出的示例如下:
{
"aggs" : {
"messages" : {
"filters" : {
"filters" : {
"errors" : { "term" : { "body" : "error" }},
"warnings" : { "term" : { "body" : "warning" }}
}
},
"aggs" : {
"monthly" : {
"histogram" : {
"field" : "timestamp",
"interval" : "1M"
}
}
}
}
}
}
我理解以下内容:
- "aggs"定义聚合块(这是"聚合"的快捷方式)。如你所见,在这个例子中实际上有嵌套的聚合。
- "messages"是用户自定义的聚合块名称。
- "errors"one_answers";warnings"是用于创建"存储桶"的过滤器的用户定义名称;对于聚合。它们会掉落带有"body"的物品。等于"error"one_answers";warning"分别("term"匹配)。
我不明白为什么"过滤器"出现两次,嵌套在自身内部。根据一般聚合语法:
"aggregations" : {
"<aggregation_name>" : {
"<aggregation_type>" : {
<aggregation_body>
}
[,"aggregations" : { [<sub_aggregation>]+ } ]?
}
[,"<aggregation_name_2>" : { ... } ]*
}
- "aggs"是"聚合"的缩写
- "messages"是我的" "聚合名称"
- "filters"是
第二个"过滤器"是什么?元素在干什么?"过滤器"在哪里有记录?必须是自嵌套的;对于我正在学习的任何其他聚合,情况似乎都不是这样。
我理解你的感受,我也经历过:-)
在filters
聚合中,第一个filters
是aggregation_type
,第二次是filters
聚合的aggregation_body
的一部分,并且是该聚合支持的唯一有效的key
。
第二个filters
可以被称为其他任何名称(filter_list
, list
等),以表示它包含该聚合的过滤器列表,但ES人员选择的filters
恰好也与聚合本身的名称相同。
它是这样的
{
"aggs" : { <--- key word to declare aggregations
"messages" : { <--- custom name for the aggregation that follows
"filters" : { <--- aggregation_type
"filters" : { <--- first (and only) key of the aggregation_body
"errors" : { "term" : { "body" : "error" }},
"warnings" : { "term" : { "body" : "warning" }}
}
},
"aggs" : {
"monthly" : {
"histogram" : {
"field" : "timestamp",
"interval" : "1M"
}
}
}
}
}
}