Elasticsearch术语过滤器出现“filter does not support [mediatest]”错误

16

我的查询像这样:

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

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

3个回答

34
上述不是有效的查询DSL。在上述Terms过滤器中,“mediaType”字段的值应该是一个数组。
应该如下所示:
{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "online": 1
              }
            },
            {
              "terms": {
                "mediaType": ["flash"]
              }
            }
          ]
        }
      }
    }
  }
}

2

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

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

0

这只是一个“term”与“terms”的问题。很容易忽略它的复数/单数方面。

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

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

当我运行上述查询时,出现了一个错误。

当我将“terms”更改为“term”后,查询就可以正常执行,如下所示:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接