GET /my_index/blogpost/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "eggs" (1)
}
},
{
"nested": {
"path": "comments", (2)
"query": {
"bool": {
"must": [ (3)
{
"match": {
"comments.name": "john"
}
},
{
"match": {
"comments.age": 28
}
}
]
}
}
}
}
]
}}}
Querying a Nested Object
Because nested objects are indexed as separate hidden documents, we can’t
query them directly. Instead, we have to use the
{ref}/query-dsl-nested-query.html[nested query] to access them:
-
The
titleclause operates on the root document. -
The
nestedclause`steps down'' into the nested `commentsfield. It no longer has access to fields in the root document, nor fields in any other nested document. -
The
comments.nameandcomments.ageclauses operate on the same nested document.
|
Tip
|
A |
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", (1)
"query": {
"bool": {
"must": [
{
"match": {
"comments.name": "john"
}
},
{
"match": {
"comments.age": 28
}
}
]
}
}
}
}
]
}
}
}
-
Give the root document the
_scorefrom the best-matching nested document.
|
Note
|
If placed inside the |