| 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-000001{  "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<<sort-search-results,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"    }  }}----
 |