Elasticsearch术语过滤器提升"过滤器不支持[mediatest]"

时间:2015-05-21 02:40:29

标签: json elasticsearch dsl

我的查询是这样的:

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "online": 1
              }
            },
            {
              "terms": {
                "mediaType": "flash"
              }
            }
          ]
        }
      }
    }
  }
}

它引发了一个QueryParsingException [[comos_v2] [terms]过滤器不支持[mediaType]] ,其中的字段是" mediaType"在映射中确实不存在。 我的问题是为什么术语过滤器不会引发异常?

3 个答案:

答案 0 :(得分:24)

以上不是有效的查询DSL。在上面的Terms filter中,“mediaType”字段的值应该是一个数组

应该如下:

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "online": 1
              }
            },
            {
              "terms": {
                "mediaType": ["flash"]
              }
            }
          ]
        }
      }
    }
  }
}

答案 1 :(得分:0)

这只是“术语”与“术语”的问题。很容易错过它的复数/单方面。

我在这个查询中遇到了一个非常相似的错误,我试图删除一个特定的区域:

'{"query":{"terms":{"zoneid":25070}}}'

运行上述查询时出现错误。

一旦将“terms”更改为“term”,查询就会毫无问题地执行,如下所示:

'{"query":{"term":{"zoneid":25070}}}'

答案 2 :(得分:0)

它是 2021 年,我使用 .keyword 进行精确文本匹配,但您也可以轻松省略:

{"query":
  {"bool":
    {"must":
      [
        {"term":
          {"variable1.keyword":var1Here}
        },
        {"term":
          {"variable2.keyword":var2Here}
        }
      ]
    }
  }
}