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

**URL:** <https://discuss.elastic.co/t/topic/125629>\
**Category:** Вопросы на русском языке\
**Created:** [March 26, 2018, 3:02pm UTC](https://discuss.elastic.co/t/topic/125629 "2018-03-26T15:02:16Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![vasina](https://avatars.discourse-cdn.com/v4/letter/v/2acd7d/32.png) [@vasina](https://discuss.elastic.co/u/vasina)\
**Post date:** [March 26, 2018, 3:02pm UTC](https://discuss.elastic.co/t/topic/125629/1 "2018-03-26T15:02:17Z")

</div>

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

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

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

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

---

<div class="post-metadata">

**Author:** ![vasina](https://avatars.discourse-cdn.com/v4/letter/v/2acd7d/32.png) [@vasina](https://discuss.elastic.co/u/vasina)\
**Post date:** [March 26, 2018, 3:09pm UTC](https://discuss.elastic.co/t/topic/125629/2 "2018-03-26T15:09:09Z")

</div>

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

```auto
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.

```

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [March 26, 2018, 3:11pm UTC](https://discuss.elastic.co/t/topic/125629/3 "2018-03-26T15:11:17Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![vasina](https://avatars.discourse-cdn.com/v4/letter/v/2acd7d/32.png) [@vasina](https://discuss.elastic.co/u/vasina)\
**Post date:** [March 26, 2018, 3:12pm UTC](https://discuss.elastic.co/t/topic/125629/4 "2018-03-26T15:12:55Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [March 26, 2018, 3:14pm UTC](https://discuss.elastic.co/t/topic/125629/5 "2018-03-26T15:14:40Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![vasina](https://avatars.discourse-cdn.com/v4/letter/v/2acd7d/32.png) [@vasina](https://discuss.elastic.co/u/vasina)\
**Post date:** [March 26, 2018, 3:22pm UTC](https://discuss.elastic.co/t/topic/125629/6 "2018-03-26T15:22:05Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![vasina](https://avatars.discourse-cdn.com/v4/letter/v/2acd7d/32.png) [@vasina](https://discuss.elastic.co/u/vasina)\
**Post date:** [March 26, 2018, 3:37pm UTC](https://discuss.elastic.co/t/topic/125629/7 "2018-03-26T15:37:14Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [March 26, 2018, 4:13pm UTC](https://discuss.elastic.co/t/topic/125629/8 "2018-03-26T16:13:43Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![vasina](https://avatars.discourse-cdn.com/v4/letter/v/2acd7d/32.png) [@vasina](https://discuss.elastic.co/u/vasina)\
**Post date:** [March 26, 2018, 4:22pm UTC](https://discuss.elastic.co/t/topic/125629/9 "2018-03-26T16:22:43Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![vasina](https://avatars.discourse-cdn.com/v4/letter/v/2acd7d/32.png) [@vasina](https://discuss.elastic.co/u/vasina)\
**Post date:** [March 26, 2018, 4:25pm UTC](https://discuss.elastic.co/t/topic/125629/10 "2018-03-26T16:25:07Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [March 26, 2018, 4:28pm UTC](https://discuss.elastic.co/t/topic/125629/11 "2018-03-26T16:28:55Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![vasina](https://avatars.discourse-cdn.com/v4/letter/v/2acd7d/32.png) [@vasina](https://discuss.elastic.co/u/vasina)\
**Post date:** [March 26, 2018, 4:30pm UTC](https://discuss.elastic.co/t/topic/125629/12 "2018-03-26T16:30:56Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![vasina](https://avatars.discourse-cdn.com/v4/letter/v/2acd7d/32.png) [@vasina](https://discuss.elastic.co/u/vasina)\
**Post date:** [March 26, 2018, 4:32pm UTC](https://discuss.elastic.co/t/topic/125629/13 "2018-03-26T16:32:48Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [March 26, 2018, 4:43pm UTC](https://discuss.elastic.co/t/topic/125629/14 "2018-03-26T16:43:06Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [April 23, 2018, 4:43pm UTC](https://discuss.elastic.co/t/topic/125629/15 "2018-04-23T16:43:07Z")

</div>

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