5.2.9. 多过滤器聚合
多过滤器聚合
定义了多桶聚合,其中每个桶都关联一个过滤器。每个桶将收集与其关联的过滤器匹配的所有文档。
PUT /logs/_bulk?refresh
{ "index" : { "_id" : 1 } }
{ "body" : "warning: page could not be rendered" }
{ "index" : { "_id" : 2 } }
{ "body" : "authentication error" }
{ "index" : { "_id" : 3 } }
{ "body" : "warning: connection timed out" }
GET logs/_search
{
  "size": 0,
  "aggs" : {
    "messages" : {
      "filters" : {
        "filters" : {
          "errors" :   { "match" : { "body" : "error"   }},
          "warnings" : { "match" : { "body" : "warning" }}
        }
      }
    }
  }
}
在上述例子中,我们分析日志信息。聚合将构建包含日志信息的两个集合(桶)—— 一个用于包含 error 的所有消息,另一个用于包含 warning 的所有消息。
响应结果:
{
  "took": 9,
  "timed_out": false,
  "_shards": ...,
  "hits": ...,
  "aggregations": {
    "messages": {
      "buckets": {
        "errors": {
          "doc_count": 1
        },
        "warnings": {
          "doc_count": 2
        }
      }
    }
  }
}
匿名过滤器
过滤器字段也可以作为过滤器数组提供,像下面的请求一样:
GET logs/_search
{
  "size": 0,
  "aggs" : {
    "messages" : {
      "filters" : {
        "filters" : [
          { "match" : { "body" : "error"   }},
          { "match" : { "body" : "warning" }}
        ]
      }
    }
  }
}
过滤的桶按照请求中提供的顺序返回,这个例子的响应结果是:
{
  "took": 4,
  "timed_out": false,
  "_shards": ...,
  "hits": ...,
  "aggregations": {
    "messages": {
      "buckets": [
        {
          "doc_count": 1
        },
        {
          "doc_count": 2
        }
      ]
    }
  }
}
other 桶
other_bucket 参数可以给响应结果添加一个桶,该桶将容纳与任何给定过滤器都不匹配的所有文档。该参数的值如下:
false
不计算 other 桶
true
返回一个 other 桶。如果使用了命名过滤器,则返回这些桶中的一个桶(默认名称为 _other_),如果使用了匿名过滤器,则返回最后一个存储桶。
other_bucket_key 参数可用于将 other 桶的键设置为除默认值 _other_ 之外的值。设置该参数会将 other_bucket 参数隐式地设置为 true。
下面的代码片段返回将一个 other 桶命名为 other_messages 桶的响应结果。
PUT logs/_doc/4?refresh
{
  "body": "info: user Bob logged out"
}
GET logs/_search
{
  "size": 0,
  "aggs" : {
    "messages" : {
      "filters" : {
        "other_bucket_key": "other_messages",
        "filters" : {
          "errors" :   { "match" : { "body" : "error"   }},
          "warnings" : { "match" : { "body" : "warning" }}
        }
      }
    }
  }
}
响应结果如下所示:
{
  "took": 3,
  "timed_out": false,
  "_shards": ...,
  "hits": ...,
  "aggregations": {
    "messages": {
      "buckets": {
        "errors": {
          "doc_count": 1
        },
        "warnings": {
          "doc_count": 2
        },
        "other_messages": {
          "doc_count": 1
        }
      }
    }
  }
}
                    
                    
                                            本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
          
Elasticsearch中文文档
            
            
                关于 LearnKu