We are working on updating this book for the latest version. Some content might be out of date.
Because nested objects
are indexed as separate hidden documents, we can’t
query them directly.
Instead, we have to use the
nested
query to access them:
GET /my_index/blogpost/_search { "query": { "bool": { "must": [ { "match": { "title": "eggs" }},{ "nested": { "path": "comments",
"query": { "bool": { "must": [
{ "match": { "comments.name": "john" }}, { "match": { "comments.age": 28 }} ] }}}} ] }}}
The | |
The | |
The |
![Tip](images/icons/tip.png)
A nested
field can contain other nested
fields. Similarly, a nested
query can contain other nested
queries. The nesting hierarchy is applied
as you would expect.
Of course, a nested
query could match several nested documents.
Each matching nested document would have its own relevance score, but these
multiple scores need to be reduced to a single score that can be applied to
the root document.
By default, it averages the scores of the matching nested documents. This can
be controlled by setting the score_mode
parameter to avg
, max
, sum
, or
even none
(in which case the root document gets a constant score of 1.0
).
GET /my_index/blogpost/_search { "query": { "bool": { "must": [ { "match": { "title": "eggs" }}, { "nested": { "path": "comments", "score_mode": "max","query": { "bool": { "must": [ { "match": { "comments.name": "john" }}, { "match": { "comments.age": 28 }} ] }}}} ] }}}
![Note](images/icons/note.png)
A nested
filter behaves much like a nested
query, except that it doesn’t
accept the score_mode
parameter. It can be used only in filter context—such as inside a filtered
query—and it behaves like any other filter:
it includes or excludes, but it doesn’t score.
While the results of the nested
filter itself are not cached, the usual
caching rules apply to the filter inside the nested
filter.