Помогите пожалуйста разобраться с агрегациями

Здравствуйте!

Предположим, у нас есть пачка джейсонов. Каждый джейсон - пользователь, кол-во вещей и некоторая другая информация. Подобные джейсоны для каждого пользователя мы получаем каждый час и иногда для конкретного пользователя эти данные ничем не отличаются кроме таймстемпа. Нам бы хотелось просуммировать кол-во вещей у всех пользователей, но для каждого пользователя взять один последний джейсон с актуальной информацией. Как это сделать с помощью аггрегаций?

По сути мы ведь хотим данные разбить на корзины по пользователю, в корзинах данные отфильтровать и взять значение поля в последнем джейсоне.

Подскажите как сделать это или нечто подобное.

Мне казалось, я хочу сделать что-то вроде того, что написано в примере для TopHits - https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-top-hits-aggregation.html

In the following example we group the questions by tag and per tag we show the last active question. For each question only the title field is being included in the source.

А зачем вы храните старые записи? Почему-бы не хранить только последнюю?

Потому что иногда интересна история. Вы считаете, нужно хранить исторические данные и мгновенные в разных индексах?

Это был бы самый простой и быстрый вариант.

А создать подобный запрос для исторических данных в принципе возможно?
И как лучше реализовать разделение данных на мгновенные и исторические, можно сделать это на стороне logstash ?

По идее нам нужно искать документ с полем "пользователь" с определенным значением в индексе мгновенных данных и если он там есть заменять его на новый?

Вам надо сделать так чтобы документы для одного и того же пользователя имели один и тот же id (например id этого пользователя). Тогда можно просто этот документ снова и снова индексировать и у вас всегда будет только одна копия этого документа в индексе.

теоретически понятно, попробую, спасибо большое

а с запросом вы с ходу не можете подсказать? просто интересно, поэтому и уточняю

С каким запросом?

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

Под запросом я имею ввиду выбор агрегации в кибане

Как это сделать в кибане - не знаю. Top hits вам дадут записи, которые вам нужны, но можно-ли как-то заставить кибану эти записи обрабатывать - я не уверен. Я в кибане не спец.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.