有弹性。查找其子项与查询不匹配的文档

时间:2018-09-14 14:02:48

标签: elasticsearch

在我的项目中,我有文档“ Book”和“ Chapter”。章是本书的孩子。 章节是否可以包含字段“字幕”。在一本书中,可能会有带或不带字幕的章节。

现在,我想建立一个查询来查找所有书籍,这些书籍的章节均未定义字幕。用空字符串定义字幕,而不是不定义字幕,对我来说不是一个选择。当然,如果不是一个选择。

我接下来尝试过:

"must_not" : [{
    "has_child" : {
       "query" : {
          "exists" : {
              "field" : "subtitle",
              "boost" : 1.0
           }
       }
    },......
}], 
"must" : [{
    "has_child" :{
        "query" : {
            "match_all" : {
               "boost" : 1.0
           }
       }            
     }
 }....]...

但是,很明显,只有当孩子是单身或所有孩子都没有字幕时,它才有效 matchAll需要过滤掉没有章节的书。

---更新----

映射:

{
"book" : {
  "_all" : {
    "enabled" : false
  },
  "properties" : {
    "bookID" : {
      "type" : "integer"
    }, 
    "publicationDate" : {
      "type" : "date"
    },
    "author" : {
      "type" : "text"
    }
  }
}


{
  "chapter" : {
    "_all" : {
       "enabled" : false
    },
    "_parent" : {
      "type" : "book"
    },
    "properties" : {
       "bookID" : {
          "type" : "integer"
       },
       "subtitle" : {
           "type" : "text"
       }
    }
}

例如,我有5本书。 1其中一个根本没有章节, 2-100%的章节带有副标题,2-其他章节混合在一起。有些章节带有字幕,有些则没有字幕。

我希望结果只得到最后两本书

0 个答案:

没有答案