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
        }
      }
    }
  }
}

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
上一篇 下一篇
CrazyZard
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~