Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Query DSL ›Объединение запросов

Запрос Has child

Возвращает родительские документы, у которых связанные дочерние документы соответствуют заданному запросу. Вы можете создать отношения родитель-дитя между документами в одном индексе, используя отображение поля join.

Поскольку запрос выполняет объединение, он has_child медленный по сравнению с другими запросами. Его производительность ухудшается по мере увеличения количества совпадающих дочерних документов, указывающих на уникальные родительские документы. Каждый has_child запрос в поиске может значительно увеличить время выполнения запроса.

Если вам важна производительность запроса, не используйте этот запрос. Если вам нужно использовать запрос has_child, используйте его как можно реже.

Пример запроса

Настройка индекса

Чтобы использовать запрос has_child, ваш индекс должен включать отображение поля join. Например:

PUT /my-index-000001
{
  "mappings": {
    "properties": {
      "my-join-field": {
        "type": "join",
        "relations": {
          "parent": "child"
        }
      }
    }
  }
}

Пример запроса

GET /_search
{
  "query": {
    "has_child": {
      "type": "child",
      "query": {
        "match_all": {}
      },
      "max_children": 10,
      "min_children": 2,
      "score_mode": "min"
    }
  }
}

Параметры верхнего уровня для запроса has_child

type
(Обязательно, строка) Имя отображения связи между родительскими и дочерними документами для поля join.
query
(Обязательно, объект запроса) Запрос, который необходимо выполнить на дочерних документах поля type. Если дочерний документ соответствует поиску, запрос возвращает родительский документ.
ignore_unmapped

(Необязательно, булево) Указывает, нужно ли игнорировать неопределённое поле type и не возвращать документы, а вместо этого возвращать ошибку. По умолчанию — false.

Если false, Elasticsearch возвращает ошибку, если поле type не отображено.

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

max_children
(Необязательно, целое число) Максимальное количество дочерних документов, соответствующих запросу query, разрешенное для возвращаемого родительского документа. Если родительский документ превышает этот лимит, он исключается из результатов поиска.
min_children
(Необязательно, целое число) Минимальное количество дочерних документов, соответствующих запросу query, необходимых для соответствия запросу родительского документа. Если родительский документ не соответствует этому лимиту, он исключается из результатов поиска.
score_mode

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

none (По умолчанию)
Не использовать оценки релевантности совпадающих дочерних документов. Запрос присваивает родительским документам оценку 0.
avg
Использовать среднее значение оценок релевантности всех совпадающих дочерних документов.
max
Использовать наивысшую оценку релевантности всех совпадающих дочерних документов.
min
Использовать наименьшую оценку релевантности всех совпадающих дочерних документов.
sum
Складывать оценки релевантности всех совпадающих дочерних документов.

Примечания

Сортировка

Вы не можете отсортировать результаты запроса has_child с помощью стандартных параметров сортировки.

Если вам нужно отсортировать возвращаемые документы по полю в их дочерних документах, используйте запрос function_score и сортируйте по полю _score. Например, следующий запрос сортирует возвращаемые документы по полю click_count их дочерних документов.

GET /_search
{
  "query": {
    "has_child": {
      "type": "child",
      "query": {
        "function_score": {
          "script_score": {
            "script": "_score * doc['click_count'].value"
          }
        }
      },
      "score_mode": "max"
    }
  }
}

© 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/query-dsl-has-child-query.html

Spec-Zone.ru

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