Has Child Queryedit
The has_child filter accepts a query and the child type to run against, and
results in parent documents that have child docs matching the query. Here is
an example:
{
"has_child" : {
"type" : "blog_tag",
"query" : {
"term" : {
"tag" : "something"
}
}
}
}Scoring capabilitiesedit
The has_child also has scoring support. The
supported score modes are min, max, sum, avg or none. The default is
none and yields the same behaviour as in previous versions. If the
score mode is set to another value than none, the scores of all the
matching child documents are aggregated into the associated parent
documents. The score type can be specified with the score_mode field
inside the has_child query:
{
"has_child" : {
"type" : "blog_tag",
"score_mode" : "sum",
"query" : {
"term" : {
"tag" : "something"
}
}
}
}Min/Max Childrenedit
The has_child query allows you to specify that a minimum and/or maximum
number of children are required to match for the parent doc to be considered
a match:
{
"has_child" : {
"type" : "blog_tag",
"score_mode" : "sum",
"min_children": 2,
"max_children": 10,
"query" : {
"term" : {
"tag" : "something"
}
}
}
}The min_children and max_children parameters can be combined with
the score_mode parameter.
Sortingedit
Parent documents can’t be sorted by fields in matching child documents via the
regular sort options. If you need to sort parent document by field in the child
documents then you can should use the function_score query and then just sort
by _score.
Sorting blogs by child documents' click_count field:
{
"query": {
"has_child" : {
"type" : "blog_tag",
"score_mode" : "max",
"query" : {
"function_score" : {
"script_score": {
"script": "_score * doc['click_count'].value"
}
}
}
}
}
}