Как подсчитать количество по ключу ведра в elasticsearch

У меня есть поле history, в котором хранится массив объектов JSON с идентификатором. Я хочу получить 10 лучших идентификаторов с количеством значений объектов JSON с определенным идентификатором.

"group_by_id": {
      "terms": {
        "field": "history.some_id"
      },
        "aggs": {
          "absolut": {
            "value_count": {
              "field": "history.some_id" // should count per bucket by bucket key (ID)
            }
          }
        }
    }

поле history выглядит так

{
  "some_id": 471741,
  ...
},
{
  "some_id": 471745,
  ...
},
...

Я получаю эти корзины и хочу, чтобы count.value использовала key для фильтрации результатов.

"group_by_id": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": 471741,    // count by this ID
          "doc_count": 5,
          "absolut": {
            "value": 20    // this value is not correct
          }
        },
        {
          "key": 471745,
          "doc_count": 2,
          "absolut": {
            "value": 17
          }
        },
    ...

Мой желаемый результат - это сегменты, значение которых учитывает только записи истории с some_id, например группу по ключу сегмента. Это возможно? Может быть, вы знаете ключевое слово, с которым я могу найти решение.


person nipeco    schedule 20.03.2018    source источник


Ответы (1)


Я думаю, что я пытался сделать странный обходной путь для моего плохого дизайна данных в elasticsearch. Для этого я создал собственный индекс, и term достаточно для топ-листа.

person nipeco    schedule 21.03.2018