Elasticsearch top_hits聚合与最新文档

时间:2019-02-15 14:48:46

标签: elasticsearch kibana elasticsearch-aggregation kibana-6

我正在尝试获取上次活动为“连接”的用户列表。理想情况下,我希望将其作为度量标准或Kibana中的数据表,分别显示最后连接的用户数和他们的列表。但是,我已经放弃了在基巴纳能够做到这一点的能力。我可以直接从Elasticsearch使用类似以下术语的聚合,然后再聚合top_hits。但是问题是,即使我按@timestamp对top_hits进行排序,结果文档也不是最新的。

{
"size" : 0,
"sort": { "@timestamp": {"order": "desc"} },
"aggs" : {
    "by_user" : {
    "terms" : { 
            "field" : "fields.username.keyword",
            "size" : 1
        },
        "aggs": {
            "last_message": {
                "top_hits": {
                    "sort": [
                        {
                            "@timestamp": {
                                "order": "desc"
                            }
                        }
                    ],
                    "_source": {
                        "includes": ["fields.username.keyword", "@timestamp", "status"]
                    },
                    "size": 1
                }
            }
        }
        }
}
}
  1. 有什么方法可以直接在Kibana中做到吗?
  2. 如何确定top_hits给我的是最新的结果,而不是“最相关的”结果?

1 个答案:

答案 0 :(得分:0)

我认为您想要的是field collapsing,它比聚合要快。

类似的情况适用于您的用例:

GET my-index/_search {
    "query": {
        "match_all": { }
    },
    "collapse" : {
        "field" : "fields.username.keyword" 
    },
    "sort": [ {
        "@timestamp": {
            "order": "desc"
         }
    } ] }

我可能会丢失一些东西,但是我不认为Kibana目前对此表示支持。