Объединить результаты двух агрегаций - PullRequest
0 голосов
/ 22 марта 2019

У меня есть индекс Elasticsearch с документами, имеющими следующие поля:

  • author
  • contributor

Каждое из этих полей может содержать несколько пользователейИдентификаторы.

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

Я могу запросить каждую агрегацию отдельно, но как мне это сделать?объединить их?Вот мой запрос:

GET documents/_search
{
  "aggs": {
    "contributor": {
      "terms": {
        "field": "contributor"
      }
    },
    "author": {
      "terms": {
        "field": "author"
      }
    }
  }
}

Прямо сейчас я получаю такой результат:

"aggregations": {
    "author": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 0,
        "buckets": [{
                "key": 2,
                "doc_count": 10
            },
            {
                "key": 1,
                "doc_count": 7
            },
            {
                "key": 5,
                "doc_count": 3
            }
        ]
    },
    "contributor": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 0,
        "buckets": [{
            "key": 5,
            "doc_count": 1
        }]
    }
}

Но я хотел бы иметь одну агрегацию, которая возвращает количество 4 документов дляпользователь 5.

1 Ответ

1 голос
/ 22 марта 2019

Хорошо, если вы можете обновить свои сопоставления и добавить поле, это должно работать.Пожалуйста, не делайте, это может быть очень медленным (агг на строку медленный и не должен использоваться слишком много).Обратите внимание: если автор = участник в том же документе, агг не будет иметь значения 2 (хорошие новости).

    {
      "mappings": {
        "test": {
          "properties": {
            "contributor": {
              "type": "keyword",
              "copy_to": "author_and_contributor"
            },
            "author": {
              "type": "keyword",
              "copy_to": "author_and_contributor"
            },
            "author_and_contributor": {
              "type": "string",
              "fielddata": true
            }
          }
        }
      }
}

{
  "size": 0,
  "aggs": {
    "author_contrib_agg": {
      "terms": {
        "field": "author_and_contributor"
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...