ElasticSearch使用嵌套aggs聚合日志条目

时间:2015-06-02 11:05:33

标签: elasticsearch

我在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查询中的某些东西。

有什么想法吗?

1 个答案:

答案 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"
                                    }
                                }
                            }        
                        }
                    }                    
                }
            }
        }
    }
}