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

时间:2016-11-07 22:31:24

标签: elasticsearch elasticsearch-2.0 elasticsearch-dsl

我有以下映射

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

我正在尝试过滤所有那些具有可选"菜单"字段存在

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

但是,当我尝试使用相同的查询过滤那些包含" restaurant_name"的文档时,它可以正常工作。那么为什么嵌套的现场检查不起作用?如何让它发挥作用?

1 个答案:

答案 0 :(得分:4)

您需要使用nested查询:

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