仅来自唯一值的Date_histogram和top_hits

时间:2019-08-29 15:18:39

标签: elasticsearch

我正在尝试进行date_histogram汇总以显示每个小时的持续时间总和。

我有以下文件:

{
  "EntryTimestamp": 1567029600000,
  "Username": "johndoe",
  "UpdateTimestamp": 1567029600000,
  "Duration": 10,
  "EntryID": "ASDF1234"
}

以下内容非常有效,但是我的问题是,有时会有多个文档使用相同的EntryID出现。因此,理想情况下,我需要以某种方式添加top_hits,并按UpdateTimestamp进行排序,因为我需要为每个唯一的EntryID提供最新的更新文档。但不确定如何将其添加到我的查询中。

{
    "size": 0,
    "query": {
        "bool": {
            "filter": [{
                    "range": {
                        "EntryTimestamp": {
                            "gte": "1567029600000",
                            "lte": "1567065599999",
                            "format": "epoch_millis"
                        }
                    }
                }, {
                    "query_string": {
                        "analyze_wildcard": true,
                        "query": "Username.keyword=johndoe"
                    }
                }
            ]
        }
    },
    "aggs": {
        "2": {
            "date_histogram": {
                "interval": "1h",
                "field": "EntryTimestamp",
                "min_doc_count": 0,
                "extended_bounds": {
                    "min": "1567029600000",
                    "max": "1567065599999"
                },
                "format": "epoch_millis"
            },
            "aggs": {
                "1": {
                    "sum": {
                        "field": "Duration"
                    }
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我认为您需要在术语聚合中添加top_hits聚合。

术语聚合将获取不同的EntryID,并且其中最热门的聚合将仅获取术语聚合的每个存储桶(每个不同的值)的最新文档(基于UpdateTimestamp)。

我没有适合您上下文的明确语法,并且我相信您可能会遇到有关子聚合数量的问题(我过去在高级聚合方面遇到了一些限制)

您可以查看this帖子以获取有关此信息的更多信息;我希望对您有帮助。