Elasticsearch 5结合了bool术语和嵌套术语过滤器

时间:2017-07-17 21:18:02

标签: elasticsearch elasticsearch-5

有嵌套查询字词过滤器https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html和bool术语过滤器https://www.elastic.co/guide/en/elasticsearch/reference/5.5/query-dsl-bool-query.html

的文档

嵌套是对象数组。不只是对象。这就是我不能使用简单的bool术语过滤器。

我的查询如下:

{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "access_account.nid": 17,
            "destroyed_at": null
          }
        }
      ],
      "must": {
        "match_all": {}
      }
    },
    "nested": {
      "path": "categories",
      "query": {
        "bool": {
          "filter": [
            {
              "terms": {
                "categories.id": [
                  15, 17
                ]
              }
            }
          ]
        }
      }
    }
  }
}

过滤器是数组,因为我有更多的术语过滤器。

我收到了这个回复 reason": "[bool] malformed query, expected [END_OBJECT] but found [FIELD_NAME]"

是否有任何解决方案如何组合父/嵌套术语过滤器?官方文档没有帮助。

我的弹性版本是5.4

感谢。

1 个答案:

答案 0 :(得分:2)

你几乎就在那里,你的nested查询只需要进入bool/filter条款:

{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "access_account.nid": 17,
            "destroyed_at": null
          }
        },
        {
          "nested": {
            "path": "categories",
            "query": {
              "bool": {
                "filter": [
                  {
                    "terms": {
                      "categories.id": [
                        15,
                        17
                      ]
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}