ElasticSearch 嵌套查询 - 排除父文档

Posted

技术标签:

【中文标题】ElasticSearch 嵌套查询 - 排除父文档【英文标题】:ElasticSearch Nested Query - exclude parent document 【发布时间】:2018-06-22 02:24:47 【问题描述】:

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

对于下面的示例,我试图排除其中一个嵌套作业具有current: true 并与company name: Elastic 匹配的所有文档。但由于其中一个嵌套作业文档与current: false 和公司name: Elastic 匹配,因此返回此文档。我正在使用嵌套查询,其中必须匹配公司名称和过滤器,其中 current: false。我怎样才能使下面的文件不被退回?

 "name": "john doe",
      "jobs": [
        
          "title": "Vice President",
          "current": true,
          "company": 
            "name": "Elastic"
          
        ,
        
          "title": "CEO",
          "current": false,
           "company": 
             "name": "Elastic"
          
     ...

【问题讨论】:

【参考方案1】:

这个怎么样? 注意,我假设您有一个 .keyword 子字段,它基本上与大写字母完全匹配。如果您有不同的名称,请相应地更改字段名称:


  "query": 
    "bool": 
      "must_not": [
        
          "nested": 
            "path": "jobs",
            "query": 
              "bool": 
                "must": [
                  
                    "term": 
                      "jobs.current": 
                        "value": "true"
                      
                    
                  ,
                  
                    "term": 
                      "jobs.company.name.keyword": 
                        "value": "Elastic"
                      
                    
                  
                ]
              
            
          
        
      ]
    
  

【讨论】:

以上是关于ElasticSearch 嵌套查询 - 排除父文档的主要内容,如果未能解决你的问题,请参考以下文章

Django可以做嵌套查询和排除吗

elasticsearch的嵌套查询nested

ElasticSearch 嵌套布尔查询

如何使用 findOne 查询 mongodb 并排除数组中的一些嵌套字段

查询Elasticsearch嵌套类型数据,且只返回嵌套数据中命中的元素

ElasticSearch Java 客户端查询嵌套对象