Elasticsearch 查询 filter/term 在涉及特殊字符时不起作用

Elasticseach query filter/term not working when special characters are involved

当“metadata.name”在“demo-application-child3”等文本中包含“-”时,以下查询不起作用。但是如果我删除“-”并查询“demoapplicationchild3”。有用。与其他字段相同metadata.version。我有 demoapplicationchild3 和 demo-application-child3 的数据。请提出建议。

 {
      "query": {
        "bool": {
          "filter": [
          {"term": { "metadata.name": "demo-application-child3" }},
          {"term": { "metadata.version": "00.00.100" }}]
        }
      }
    }

未分析术语查询请参阅official doc,其中清楚地提到了这一点

Returns documents that contain an exact term in a provided field.

这显然意味着索引时间你正在使用一些自定义分析器,它正在删除 - 并加入令牌,即对于 demo-application-child3 你的自定义分析器将生成 demoapplicationchild3 令牌,这您可以使用 Analyze api.

轻松确认

如果您想获得结果,请将 term 查询更改为 match 查询,或者如果映射是动态生成的,请在您的字段中使用 .keyword 后缀,或者创建另一个字段输入 keyword,它使用 no-op 分析器。