summaryrefslogtreecommitdiff
path: root/docs/reference/query-dsl/has-parent-query.asciidoc
blob: 09ec3383cc246e9fc69a99c2fce97dea3df26d3c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
[[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]
--------------------------------------------------
GET /_search
{
    "query": {
        "has_parent" : {
            "parent_type" : "blog",
                "query" : {
                    "term" : {
                        "tag" : "something"
                    }
                }
        }
    }
}
--------------------------------------------------
// CONSOLE

[float]
==== Scoring capabilities

The `has_parent` also has scoring support. The default is `false` which
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 is set to `true`, then the score of the matching parent
document is aggregated into the child documents belonging to the
matching parent document. The score mode can be specified with the
`score` field inside the `has_parent` query:

[source,js]
--------------------------------------------------
GET /_search
{
    "query": {
        "has_parent" : {
            "parent_type" : "blog",
                "score" : true,
                "query" : {
                    "term" : {
                        "tag" : "something"
                    }
                }
        }
    }
}
--------------------------------------------------
// CONSOLE

[float]
==== Ignore Unmapped

When 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 when
querying 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]
==== Sorting

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:

[source,js]
--------------------------------------------------
GET /_search
{
    "query": {
        "has_parent" : {
            "parent_type" : "blog",
            "score" : true,
            "query" : {
                "function_score" : {
                    "script_score": {
                        "script": "_score * doc['view_count'].value"
                    }
                }
            }
        }
    }
}
--------------------------------------------------
// CONSOLE