| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 | [[query-dsl-has-child-query]]=== Has child query++++<titleabbrev>Has child</titleabbrev>++++Returns parent documents whose <<parent-join,joined>> child documents match aprovided query. You can create parent-child relationships between documents inthe same index using a <<parent-join,join>> field mapping.[WARNING]====Because it performs a join, the `has_child` is slow compared to other queries.Its performance degrades as the number of matching child documents pointing tounique parent documents increases. Each `has_child` query in a search canincrease query time significantly.If you care about query performance, do not use this query. If you need to usethe `has_child` query, use it as rarely as possible. ====[[has-child-query-ex-request]]==== Example request[[has-child-index-setup]]===== Index setupTo use the `has_child` query, your index must include a <<parent-join,join>>field mapping. For example:[source,console]----PUT /my_index{    "mappings": {        "properties" : {            "my-join-field" : {                "type" : "join",                "relations": {                    "parent": "child"                }            }        }    }}----// TESTSETUP[[has-child-query-ex-query]]===== Example query[source,console]----GET /_search{    "query": {        "has_child" : {            "type" : "child",            "query" : {                "match_all" : {}            },            "max_children": 10,            "min_children": 2,            "score_mode" : "min"        }    }}----[[has-child-top-level-params]]==== Top-level parameters for `has_child``type`::(Required, string) Name of the child relationship mapped for the<<parent-join,join>> field.`query`::(Required, query object) Query you wish to run on child documents of the `type`field. If a child document matches the search, the query returns the parentdocument.`ignore_unmapped`::+--(Optional, boolean) Indicates whether to ignore an unmapped `type` and notreturn any documents instead of an error. Defaults to `false`.If `false`, {es} returns an error if the `type` is unmapped.You can use this parameter to query multiple indices that may not contain the`type`.--`max_children`::(Optional, integer) Maximum number of child documents that match the `query`allowed for a returned parent document. If the parent document exceeds thislimit, it is excluded from the search results.`min_children`::(Optional, integer) Minimum number of child documents that match the `query`required to match the query for a returned parent document. If the parentdocument does not meet this limit, it is excluded from the search results.`score_mode`::+--(Optional, string) Indicates how scores for matching child documents affect theroot parent document's <<relevance-scores,relevance score>>. Valid valuesare:`none` (Default)::Do not use the relevance scores of matching child documents. The query assignsparent documents a score of `0`.`avg`::Use the mean relevance score of all matching child documents.`max`::Uses the highest relevance score of all matching child documents.`min`::Uses the lowest relevance score of all matching child documents.`sum`::Add together the relevance scores of all matching child documents.--[[has-child-query-notes]]==== Notes[[has-child-query-performance]]===== SortingYou cannot sort the results of a `has_child` query using standard<<request-body-search-sort,sort options>>.If you need to sort returned documents by a field in their child documents, usea `function_score` query and sort by `_score`. For example, the following querysorts returned documents by the `click_count` field of their child documents.[source,console]----GET /_search{    "query": {        "has_child" : {            "type" : "child",            "query" : {                "function_score" : {                    "script_score": {                        "script": "_score * doc['click_count'].value"                    }                }            },            "score_mode" : "max"        }    }}----
 |