В Elasticsearch как получить среднее значение разницы во времени документов для конкретного пользователя? - PullRequest
0 голосов
/ 27 ноября 2018

Допустим, один документ Elasticsearch может выглядеть следующим образом:

{
    "created": "2018-11-26T22:20:01+00:00",
    "user_id": 2,
    "text": "Test!"
    "verb": "comment_posted",
    "thread_id": 1
}

Я бы хотел отфильтровать по глаголу только "comment_posted", а затем получить среднее время между комментариями для определенного поста (созданное поле) для каждого пользователя.

Вот пример набора данных и ожидаемых результатов:

  • Пользователь 'A' публикует сообщения в теме '1' (начинает тему) в 1:30

  • Пользователь «B» публикует сообщения в теме «2» (начало темы) в 1:45

  • Пользователь 'A' публикует сообщения в теме'2' в 2: 00

  • Пользователь 'B' публикует сообщения в теме '1' в 3: 30

  • Пользователь 'B' сообщенийв теме '1' в 4: 30

  • Пользователь 'A' публикует сообщения в теме '1' в 5: 15

Пользователь 'A'будет в среднем 30 минут (2:00 - 1:45 и 5:15 - 4:30), а пользователь' B 'будет в среднем 120 минут (3:30 - 1:30 и 4:30- 3:30).

Как будет выглядеть мой запрос?

1 Ответ

0 голосов
/ 27 ноября 2018

Короткий ответ

Это возможно возможно сделать это, но не рекомендуется .

Длинный ответ

В общем, чтобы сделать что-то подобное, вам нужно использовать агрегацию .

Единственная агрегация, которая позволяет вычислять дельты, - это SerialРазностная агрегация .Однако он предназначен для использования в контексте агрегирования гистограммы или гистограммы даты.

В вашем случае, чтобы получить один комментарий для каждой группы гистограмм, вы можете создать гистограмму с очень маленькой группой (например, подразделениемвторой), затем используйте последовательную разность, чтобы получить дельты времени.Как упоминалось в этом ответе на форуме ElasticSearch, однако, это было бы ужасно с точки зрения производительности.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...