我在ES群集中有一些简单的日志文件数据,映射为:
{
"category": {
"type": "string"
},
"element": {
"type": "long"
},
"group": {
"type": "string"
},
"seen_at": {
"type": "date",
"format": "dateOptionalTime"
}
}
...我想以基于时间的各种时间间隔进行汇总并存储在另一个索引中。我需要每个类别/组中每个元素的间隔(基本上是某些资源的ID)。我想出了一些嵌套的aggs:
{
"size": 0,
"aggs": {
"categories": {
"terms": {
"field": "category"
},
"aggs": {
"groups": {
"terms": {
"field": "group"
},
"aggs": {
"elements": {
"terms": {
"field": "element"
},
"aggs": {
"annual": {
"date_histogram": {
"field": "seen_at",
"interval": "1d",
"format": "yyyy-MM-dd"
}
}
}
}
}
}
}
}
}
}
..但它似乎仅返回部分数据(并非所有“元素” ID都在汇总结果中)。没有超时,没有错误。所以我猜它在我的嵌套aggs查询中。
有任何想法吗?
最佳答案
默认情况下,在terms
聚合中仅返回最顶层的10个存储桶。但是您绝对可以通过添加size
参数来增加此限制来更改此行为。参见下文,我已将限制增加到100,但是您可以增加(或减少)更多以更好地满足您的需求。
{
"size": 0,
"aggs": {
"categories": {
"terms": {
"field": "category",
"size": 100 <----- increase size
},
"aggs": {
"groups": {
"terms": {
"field": "group",
"size": 100 <----- increase size
},
"aggs": {
"elements": {
"terms": {
"field": "element",
"size": 100 <----- increase size
},
"aggs": {
"annual": {
"date_histogram": {
"field": "seen_at",
"interval": "1d",
"format": "yyyy-MM-dd"
}
}
}
}
}
}
}
}
}
}
关于elasticsearch - ElasticSearch使用嵌套aggs聚合日志条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30594306/