Has Parent Query

edit

The has_parent query accepts a query and a parent type. The query is executed in the parent document space, which is specified by the parent type. This query returns child documents which associated parents have matched. For the rest has_parent query has the same options and works in the same manner as the has_child query.

{
    "has_parent" : {
        "parent_type" : "blog",
        "query" : {
            "term" : {
                "tag" : "something"
            }
        }
    }
}

Scoring capabilities

edit

The has_parent also has scoring support. The supported score types are score or none. The default is none and this ignores the score from the parent document. The score is in this case equal to the boost on the has_parent query (Defaults to 1). If the score type is set to score, then the score of the matching parent document is aggregated into the child documents belonging to the matching parent document. The score type can be specified with the score_mode field inside the has_parent query:

{
    "has_parent" : {
        "parent_type" : "blog",
        "score_mode" : "score",
        "query" : {
            "term" : {
                "tag" : "something"
            }
        }
    }
}

Sorting

edit

Child documents can’t be sorted by fields in matching parent documents via the regular sort options. If you need to sort child documents by field in the parent documents then you can should use the function_score query and then just sort by _score.

Sorting tags by parent document' view_count field:

{
    "query": {
        "has_parent" : {
            "parent_type" : "blog",
            "score_mode" : "score",
            "query" : {
                "function_score" : {
                    "script_score": {
                        "script": "_score * doc['view_count'].value"
                    }
                }
            }
        }
    }
}