We are working on updating this book for the latest version. Some content might be out of date.
Querying a Nested Objectedit
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 |

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 } } ] } } } } ] } } }

If placed inside the filter
clause of a Boolean query, a nested
query behaves
much like a nested
query, except that it doesn’t accept the score_mode
parameter. Because it is being used as a non-scoring query — it includes or excludes,
but doesn’t score — a score_mode
doesn’t make sense since there is nothing to score.