[[query-dsl-has-parent-query]]
== Has Parent Query

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.

[source,js]
--------------------------------------------------
{
    "has_parent" : {
        "parent_type" : "blog",
        "query" : {
            "term" : {
                "tag" : "something"
            }
        }
    }
}
--------------------------------------------------

[float]
=== Scoring capabilities

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:

[source,js]
--------------------------------------------------
{
    "has_parent" : {
        "parent_type" : "blog",
        "score_mode" : "score",
        "query" : {
            "term" : {
                "tag" : "something"
            }
        }
    }
}
--------------------------------------------------

[float]
=== Memory Considerations

In order to support parent-child joins, all of the (string) parent IDs 
must be resident in memory (in the <<index-modules-fielddata,field data cache>>. 
Additionally, every child document is mapped to its parent using a long
value (approximately). It is advisable to keep the string parent ID short
in order to reduce memory usage.

You can check how much memory is being used by the `_parent` field in the fielddata cache
using the <<indices-stats,indices stats>> or <<cluster-nodes-stats,nodes stats>>
APIS, eg:

[source,js]
--------------------------------------------------
curl -XGET "http://localhost:9200/_stats/fielddata?pretty&human&fielddata_fields=_parent"
--------------------------------------------------


