ElasticSearch 2.x 存在嵌套字段的过滤器不起作用

ElasticSearch 2.x exists filter for nested field doesn't work

我有以下映射

{
  "properties": {
    "restaurant_name": {"type": "string"},
    "menu": {
      "type": "nested",
      "properties": {
        "name": {"type": "string"}
      }
    }
  }
}

我正在尝试过滤所有具有可选 "menu" 字段的文档

GET /restaurnats/_search
{
  "filter": {
    "query": {
      "bool": {
        "must": [
          {"exists" : { "field" : "menu" }}
        ]
      }
    }
  }
}

但是,当我尝试使用相同的查询来过滤那些具有 "restaurant_name" 的文档时,它工作正常。那么为什么嵌套字段检查不起作用?如何让它发挥作用?

您需要改用 nested 查询:

{
  "filter": {
    "query": {
      "nested": {
        "path": "menu",
        "query": {
          "bool": {
            "must": [
              {
                "exists": {
                  "field": "menu"
                }
              }
            ]
          }
        }
      }
    }
  }
}