ElasticSearch 嵌套查询 - 排除父文档
ElasticSearch Nested Query - exclude parent document
正在尝试排除其中一个子文档与查询不匹配的顶级文档。
对于下面的示例,我试图排除其嵌套作业之一具有 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"
}
...
这个怎么样? 注意,我假设您有一个 .keyword
子字段,它基本上完全匹配大写字母。如果您有不同的名称,请相应地更改字段名称:
{
"query": {
"bool": {
"must_not": [
{
"nested": {
"path": "jobs",
"query": {
"bool": {
"must": [
{
"term": {
"jobs.current": {
"value": "true"
}
}
},
{
"term": {
"jobs.company.name.keyword": {
"value": "Elastic"
}
}
}
]
}
}
}
}
]
}
}
}
正在尝试排除其中一个子文档与查询不匹配的顶级文档。
对于下面的示例,我试图排除其嵌套作业之一具有 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"
}
...
这个怎么样? 注意,我假设您有一个 .keyword
子字段,它基本上完全匹配大写字母。如果您有不同的名称,请相应地更改字段名称:
{
"query": {
"bool": {
"must_not": [
{
"nested": {
"path": "jobs",
"query": {
"bool": {
"must": [
{
"term": {
"jobs.current": {
"value": "true"
}
}
},
{
"term": {
"jobs.company.name.keyword": {
"value": "Elastic"
}
}
}
]
}
}
}
}
]
}
}
}