Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Агрегирование ›Агрегирование по корзинам

Агрегирование по вложенным документам

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

Агрегация reverse_nested должна быть определена внутри агрегации nested.

Параметры:

  • path — определяет, к какому вложенному объекту поле должно быть присоединено обратно. По умолчанию пусто, что означает присоединение к корневому/главному уровню документа. Путь не может содержать ссылку на поле вложенного объекта, которое выходит за пределы вложенной структуры агрегации nested, в которой находится reverse_nested.

Например, предположим, что у нас есть индекс для системы отслеживания тикетов с проблемами и комментариями. Комментарии внедрены в документы проблем как вложенные документы. Картирование может выглядеть так:

PUT /issues
{
  "mappings": {
    "properties": {
      "tags": { "type": "keyword" },
      "comments": {                            
        "type": "nested",
        "properties": {
          "username": { "type": "keyword" },
          "comment": { "type": "text" }
        }
      }
    }
  }
}

comments — это массив, содержащий вложенные документы под объектом issue.

Следующие агрегации вернут имена пользователей основных комментаторов, которые оставили комментарии, и по каждому основному комментатору — самые важные теги проблем, по которым пользователь оставил комментарии:

GET /issues/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "comments": {
      "nested": {
        "path": "comments"
      },
      "aggs": {
        "top_usernames": {
          "terms": {
            "field": "comments.username"
          },
          "aggs": {
            "comment_to_issue": {
              "reverse_nested": {}, 
              "aggs": {
                "top_tags_per_comment": {
                  "terms": {
                    "field": "tags"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

Как видно выше, агрегация reverse_nested помещается в агрегацию nested, так как это единственное место в DSL, где можно использовать агрегацию reverse_nested. Единственная ее цель — подключиться к родительскому документу выше в структуре вложенных объектов.

Агрегация reverse_nested подключается к корневому/главному уровню документа, так как не было определено path. С помощью параметра path агрегация reverse_nested может подключиться к другому уровню, если в карте были определены несколько уровней вложенных объектов.

Возможный фрагмент ответа:

{
  "aggregations": {
    "comments": {
      "doc_count": 1,
      "top_usernames": {
        "doc_count_error_upper_bound" : 0,
        "sum_other_doc_count" : 0,
        "buckets": [
          {
            "key": "username_1",
            "doc_count": 1,
            "comment_to_issue": {
              "doc_count": 1,
              "top_tags_per_comment": {
                "doc_count_error_upper_bound" : 0,
                "sum_other_doc_count" : 0,
                "buckets": [
                  {
                    "key": "tag_1",
                    "doc_count": 1
                  }
                  ...
                ]
              }
            }
          }
          ...
        ]
      }
    }
  }
}

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/search-aggregations-bucket-reverse-nested-aggregation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API