Elasticsearch通配符查询不支持字段分析器

Pra*_*atz 2 elasticsearch

我有一个名为“ tag”的字段,该字段在elasticsearch中被分析(默认行为)。“标签”字段可以有一个单词或逗号分隔的字符串来存储多个标签。例如。“节日,快速,盛宴”。现在,例如,如果标签为“节日”,在索引之前,我将其转换为小写(忽略大小写),并将其索引为“节日”。

现在,如果按如下所述使用所有大写字母的匹配查询进行搜索,则结果会很好(如预期)。

{
    "query": {
        "match": {
           "tag": "FESTIVE"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我按如下所述执行通配符查询,则不会得到结果:(

{
    "query": {
        "wildcard": {
           "tag": {
              "value": "F*"
           }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我将通配符搜索中的值字段更改为“ f *”而不是“ F *”,那么我会得到结果。

有谁知道通配符查询为什么区分大小写?

Chi*_*h25 5

通配符查询属于此类term level queries因此不予分析。来自文档

匹配具有与通配符表达式匹配的字段的文档(未分析)

通过查询字符串query,您将获得预期的结果,它将lowercase是术语,因为默认情况下为lowercase_expanded_termstrue。尝试这个

GET your_index/_search
{
  "query": {
    "query_string": {
      "default_field": "tag",
      "query": "F*"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!