Запрос по родительскому элементу
Возвращает дочерние документы, у которых родительский документ, объединённый по соединяемому полю, соответствует заданному запросу. Вы можете создать родительско-дочерние отношения между документами в одном индексе с помощью отображения поля соединения.
Из-за выполнения объединения запрос has_parent медленнее, чем другие запросы. Его производительность снижается по мере увеличения числа совпадающих родительских документов. Каждый запрос has_parent в поиске может значительно увеличить время выполнения запроса.
Пример запроса
Настройка индекса
Для использования запроса has_parent ваш индекс должен содержать отображение поля соединения. Например:
PUT /my-index-000001
{
"mappings": {
"properties": {
"my-join-field": {
"type": "join",
"relations": {
"parent": "child"
}
},
"tag": {
"type": "keyword"
}
}
}
} Пример запроса
GET /my-index-000001/_search
{
"query": {
"has_parent": {
"parent_type": "parent",
"query": {
"term": {
"tag": {
"value": "Elasticsearch"
}
}
}
}
}
} Параметры верхнего уровня для запроса has_parent
-
parent_type - (Обязательно, строка) Имя родительского отношения, сопоставленного для поля соединения.
-
query - (Обязательно, объект запроса) Запрос, который вы хотите выполнить для родительских документов поля
parent_type. Если родительский документ соответствует поиску, запрос возвращает его дочерние документы. -
score -
(Необязательно, Булево) Указывает, будет ли агрегирован балл релевантности совпадающего родительского документа в дочерние документы. По умолчанию значение равно
false.Если
false, Elasticsearch игнорирует релевантность родительского документа. Elasticsearch также присваивает каждому дочернему документу релевантность, равнуюquery'sboost, которая по умолчанию равна1.Если
true, релевантность соответствующего родительского документа агрегируется в релевантность дочерних документов. -
ignore_unmapped -
(Необязательно, Булево) Указывает, следует ли игнорировать необъявленное поле
parent_typeи не возвращать документы вместо ошибки. По умолчанию равноfalse.Если
false, Elasticsearch возвращает ошибку, если полеparent_typeне объявлено.Вы можете использовать этот параметр для поиска в нескольких индексах, которые могут не содержать поле
parent_type.
Примечания
Сортировка
Вы не можете отсортировать результаты запроса has_parent с помощью стандартных вариантов сортировки.
Если вам нужно отсортировать возвращаемые документы по полю в родительских документах, используйте запрос function_score и отсортируйте по полю _score. Например, следующий запрос сортирует возвращаемые документы по полю view_count родительских документов.
GET /_search
{
"query": {
"has_parent": {
"parent_type": "parent",
"score": true,
"query": {
"function_score": {
"script_score": {
"script": "_score * doc['view_count'].value"
}
}
}
}
}
}
© 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-parent-query.html