需要解释ElasticSearch过滤器聚合



我试图理解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聚合中,第一个filtersaggregation_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"
          }
        }
      }
    }
  }
}

最新更新