Агрегирование Elasticsearch top_hits против последнего документа - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь получить список пользователей, которые в качестве своей последней активности "подключаются".В идеале я хочу, чтобы это было в виде метрики, или таблицы данных в Кибане, показывающей количество пользователей, которые подключились последними, и список их соответственно.Однако я отказался от возможности делать это в Кибане.Я могу получить нечто подобное непосредственно от Elasticsearch, используя агрегирование терминов, за которым следует top_hits, как показано ниже.Но проблема в том, что, хотя я сортирую top_hits по @timestamp, полученный документ в НЕ самом последнем.

{
"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. Есть ли способ сделать это непосредственно в Кибане?
  2. Как я могу убедиться, что top_hits дает мне последние результаты, а не "самые важные"?

1 Ответ

0 голосов
/ 18 февраля 2019

Я думаю, что вам нужно свертывание полей , что быстрее, чем агрегация.

Что-то подобное должно работать для вашего варианта использования:

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

Возможно, я что-то упускаю, но я не думаю, что Кибана в данный момент поддерживает это.

...