ElasticSearch嵌套查询 - 排除父文档

时间:2018-01-12 15:36:18

标签: elasticsearch elasticsearch-dsl elasticsearch-rails elasticsearch-ruby elasticsearch-nested

尝试排除其中一个子文档与查询不匹配的顶级文档。

对于下面的示例,我尝试排除其中一个嵌套作业具有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"
          }
     ...

1 个答案:

答案 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"
                      }
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}