不区分大小写不起作用

Jon*_*sie 16 elasticsearch nest

我无法弄清楚为什么我的搜索区分大小写.我读过的所有内容都说ES默认情况下不敏感.我有指定标准分析器用于索引和搜索的映射,但似乎有些东西仍然区分大小写 - 即,通配符:

"query": {
"bool": {
  "must": [
    {
      "wildcard": {
        "name": {
          "value": "Rae*"
        }
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

这失败但是"rae*"按预期工作.我需要使用通配符进行'开始'类型搜索(我推测).

我正在使用.Net应用程序中的NEST,并在创建索引时指定分析器:

  var settings = new IndexSettings();
  settings.NumberOfReplicas = _configuration.Replicas;
  settings.NumberOfShards = _configuration.Shards;
  settings.Add("index.refresh_interval", "10s");
  settings.Analysis.Analyzers.Add(new KeyValuePair<string, AnalyzerBase>("keyword", new KeywordAnalyzer()));
  settings.Analysis.Analyzers.Add(new KeyValuePair<string, AnalyzerBase>("simple", new SimpleAnalyzer()));
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它使用简单的分析仪,但标准的分析仪具有相同的结果.

映射看起来像这样:

name: {
    type: string
    analyzer: simple
    store: yes
}
Run Code Online (Sandbox Code Playgroud)

有人在这里有任何想法吗?

谢谢

小智 30

文档中,

"[通配符查询]匹配具有与通配符表达式匹配(未分析)的字段的文档".

由于未分析搜索词,因此在生成搜索查询之前,您基本上需要自己运行分析.在这种情况下,这只意味着您的搜索字词必须是小写的.或者,您可以使用query_string:

{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "name:Rae*"
          }
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)