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 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。