我试图了解ElasticSearch中过滤器聚合的语法,但很困惑。文档中给出的示例是这样的:
{ "aggs" : { "messages" : { "filters" : { "filters" : { "errors" : { "term" : { "body" : "error" }}, "warnings" : { "term" : { "body" : "warning" }} } }, "aggs" : { "monthly" : { "histogram" : { "field" : "timestamp", "interval" : "1M" } } } } } }
我了解以下内容:
我不明白的是为什么“过滤器”出现两次,嵌套在其内部。根据常规聚合语法:
"aggregations" : { "<aggregation_name>" : { "<aggregation_type>" : { <aggregation_body> } [,"aggregations" : { [<sub_aggregation>]+ } ]? } [,"<aggregation_name_2>" : { ... } ]* }
第二个“过滤器”元素在做什么?在哪里记录到“过滤器”必须是自嵌套的;我正在学习的任何其他聚合似乎都不是这种情况。
感谢您的解释!
我也了解您的感受,也去过那里:-)
在filters聚合中,第一filters发生是aggregation_type,第二个是部分aggregation_body的的filters聚集和是唯一有效的key,这种聚合载体。
filters
aggregation_type
aggregation_body
key
第二次filters出现可能被称为其他任何名称(filter_list,list等),以表示它包含用于该聚合的筛选器列表,但是ES员工选择的filters这些名称也恰好与聚合本身的名称相同。
filter_list
list
所以它是这样的:
{ "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" } } } } } }