我在ES集群中有一些简单的日志文件数据,映射是:
{
"category": {
"type": "string"
},
"element": {
"type": "long"
},
"group": {
"type": "string"
},
"seen_at": {
"type": "date",
"format": "dateOptionalTime"
}
}
...我希望在variuos基于时间的间隔中聚合并存储在另一个索引中。我需要每个类别/组中每个元素的间隔(它基本上是某个资源的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查询中的某些东西。
有什么想法吗?
答案 0 :(得分:2)
默认情况下,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"
}
}
}
}
}
}
}
}
}
}