尝试排除其中一个子文档与查询不匹配的顶级文档。
对于下面的示例,我尝试排除其中一个嵌套作业具有current: true
并且与company name: Elastic
匹配的所有文档。但由于其中一个嵌套作业文档与current: false
和公司name: Elastic
匹配,因此返回此文档。我正在使用嵌套查询,公司名称必须匹配,并且过滤器当前为:false。如何才能使下面的文件不被退回?
"name": "john doe",
"jobs": [
{
"title": "Vice President",
"current": true,
"company": {
"name": "Elastic"
}
},
{
"title": "CEO",
"current": false,
"company": {
"name": "Elastic"
}
...
答案 0 :(得分:1)
这个怎么样? 注意我假设您有一个.keyword
sub0字段,它基本上与大写字母完全匹配。如果您的方式不同,请相应地更改字段名称:
{
"query": {
"bool": {
"must_not": [
{
"nested": {
"path": "jobs",
"query": {
"bool": {
"must": [
{
"term": {
"jobs.current": {
"value": "true"
}
}
},
{
"term": {
"jobs.company.name.keyword": {
"value": "Elastic"
}
}
}
]
}
}
}
}
]
}
}
}