我有一个包含用户数组的文档。在用户数组内部,我有汽车数组。 我只想过滤出与查询匹配的文档部分。
我尝试添加过滤器,但似乎未返回正确的结果。
这是我的文档,其中包含两个用户。 每个用户都会有几辆车。
{
"group": "fans",
"user": [
{
"first": "John",
"last": "Paul",
"cars": [
{
"model": "deyatona",
"make": "ferrari"
},
{
"model": "gallardo",
"make": "lamborghini"
}
]
},
{
"first": "Papa",
"last": "Jones",
"cars": [
{
"model": "Q7",
"make": "audi"
},
{
"model": "250 gt",
"make": "ferrari"
}
]
}
]
}
---
Here is my search query:
{
"query": {
"nested": {
"path": "user",
"query": {
"bool": {
"must": [
{
"match": {
"user.first": "John"
}
},
{
"nested": {
"path": "user.cars",
"query": {
"match": {
"user.cars.make": "ferrari"
}
}
}
}
]
}
}
}
}
}
===>
This obviously returns the whole document.
I want to filter out only the following part which matches the query:
{
"first": "John",
"last": "Paul",
"cars": [
{
"model": "deyatona",
"make": "ferrari"
}
]
}
答案 0 :(得分:0)
使用inner_hits。
{
"query": {
"nested": {
"inner_hits": {
"name": "outer",
"_source": ["user.first", "user.last"]
},
"path": "user",
"query": {
"bool": {
"must": [
{
"match": {
"user.first": "John"
}
},
{
"nested": {
"inner_hits": {},
"path": "user.cars",
"query": {
"match": {
"user.cars.make": "ferrari"
}
}
}
}
]
}
}
}
},
"_source": false
}