当所有嵌套文档与术语条件匹配时,过滤弹性搜索父文档

时间:2015-02-02 18:22:52

标签: elasticsearch

我有一个包含嵌套文档的父文档:

parent_mapping = {
  _id: { path: "id" },
  properties: {
    id: { type: "integer" },
    content: { type: "string" },
...
    children: {
      type: "nested",
        properties: {
          id:             { type: "integer" },
          main_entry:     { type: "boolean" },
...

我想获取所有嵌套文档中main_entry设置为“false”的所有父文档。

filter: {
    nested: {
      path: "entries",
      filter: {
        not: {
          term: { "entries.main_entry" => "true" }
        }
      }
    }
  }

目前这给了我所有拥有任何嵌套文档的父母,其中main_entry设置为“false”。

我正在努力排除将main_entry设置为“true”的嵌套子项的结果。

1 个答案:

答案 0 :(得分:1)

问题是过滤器没有将条件应用于所有嵌套条目;相反,它过滤掉了具有与条件匹配的0个条目的文档。我的同事指出,通过在嵌套过滤器之外移动否定,我可以得到我想要的结果。

      filter: {
        not: {
          nested: {
            path: "entries",
            filter: {
              term: { "entries.main_entry" => "true" }
            }
          }
        }
      }