我在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/

10-13 07:46