I have a document:
{
"recipes": [
{
"name": "prepare",
"ingredients": ["pork","beef"],
"steps": [
{
"ingredients": ["pork","beef"]
}
]
},
{
"name": "cook",
"ingredients": ["olive","garlic","onion","salt"],
"steps": [
{
"ingredients": ["garlic","onion"]
},
{
"ingredients": ["olive"]
},
{
"ingredients": ["salt"]
}
]
}
]
}
and a mapping:
{
"mappings": {
"properties": {
"recipes": {
"type": "nested",
"properties": {
"name": {
"type": "keyword"
},
"ingredients": {
"type": "keyword"
},
"steps": {
"type": "nested",
"properties": {
"ingredients": {
"type": "keyword"
}
}
}
}
}
}
}
}
I want to ask what the behaviour of the nested query is, if I use a query like this:
{
"_source": ["*.inner_hits"],
"query": {
"nested": {
"path": "recipes.steps",
"query": {
"bool": {
"must": [
{
"term": {
"recipes.steps.ingredients": "garlic" (1)
}
},
{
"bool": {
"must": [
{
"nested": {
"path": "recipes",
"query": {
"bool": {
"must": [
{
"term": {
"recipes.ingredients": "pork" (2)
}
},
{
"term": {
"recipes.ingredients": "beef" (3)
}
}
]
}
},
"inner_hits": {}
}
}
]
}
}
]
}
},
"inner_hits": {}
}
}
}
The query will return the document above, so it basically get the garlic
from the second recipe, first step, i.e. recipes[1]["steps"][0]["ingredients"]
, and the pork
from the first recipe, i.e. recipes[0]["ingredients"]
. But if I switch the (1) to pork
, and (2) to garlic
and (3) to onion
, I expect it also returns the document, but it does not. So, how it really works?
Thank you.