| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 | [[query-dsl-has-child-query]]=== Has Child QueryThe `has_child` filter accepts a query and the child type to run against, andresults in parent documents that have child docs matching the query. Here isan example:[source,js]--------------------------------------------------GET /_search{    "query": {        "has_child" : {            "type" : "blog_tag",                "query" : {                    "term" : {                        "tag" : "something"                    }                }        }    }}--------------------------------------------------// CONSOLE[float]==== Scoring capabilitiesThe `has_child` also has scoring support. Thesupported score modes are `min`, `max`, `sum`, `avg` or `none`. The default is`none` and yields the same behaviour as in previous versions. If thescore mode is set to another value than `none`, the scores of all thematching child documents are aggregated into the associated parentdocuments. The score type can be specified with the `score_mode` fieldinside the `has_child` query:[source,js]--------------------------------------------------GET /_search{    "query": {        "has_child" : {            "type" : "blog_tag",                "score_mode" : "min",                "query" : {                    "term" : {                        "tag" : "something"                    }                }        }    }}--------------------------------------------------// CONSOLE[float]==== Min/Max ChildrenThe `has_child` query allows you to specify that a minimum and/or maximumnumber of children are required to match for the parent doc to be considereda match:[source,js]--------------------------------------------------GET /_search{    "query": {        "has_child" : {            "type" : "blog_tag",            "score_mode" : "min",            "min_children": 2, <1>            "max_children": 10, <1>            "query" : {                "term" : {                    "tag" : "something"                }            }        }    }}--------------------------------------------------// CONSOLE<1> Both `min_children` and `max_children` are optional.The  `min_children` and `max_children` parameters can be combined withthe `score_mode` parameter.[float]==== Ignore UnmappedWhen set to `true` the `ignore_unmapped` option will ignore an unmapped `type`and will not match any documents for this query. This can be useful whenquerying multiple indexes which might have different mappings. When set to`false` (the default value) the query will throw an exception if the `type`is not mapped.[float]==== SortingParent documents can't be sorted by fields in matching child documents via theregular sort options. If you need to sort parent document by field in the childdocuments then you can should use the `function_score` query and then just sortby `_score`.Sorting blogs by child documents' `click_count` field:[source,js]--------------------------------------------------GET /_search{    "query": {        "has_child" : {            "type" : "blog_tag",            "score_mode" : "max",            "query" : {                "function_score" : {                    "script_score": {                        "script": "_score * doc['click_count'].value"                    }                }            }        }    }}--------------------------------------------------// CONSOLE
 |