关于Elasticsearch:不区分大小写的情况不起作用

Case insensitivity does not work

我不知道为什么我的搜索区分大小写。我读过的所有内容都表明,默认情况下,ES不敏感。我有一些映射为索引和搜索指定了标准分析器,但似乎有些东西还是区分大小写的,即通配符:

1
2
3
4
5
6
7
8
9
10
11
12
"query": {
"bool": {
 "must": [
    {
     "wildcard": {
       "name": {
         "value":"Rae*"
        }
      }
    }
  ]
}

此操作失败,但" rae *"可按需要工作。我需要使用通配符来进行"开始于"类型的搜索(我想)。

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

1
2
3
4
5
6
  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()));

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

映射看起来像这样:

1
2
3
4
5
name: {
    type: string
    analyzer: simple
    store: yes
}

有人知道这里有什么问题吗?

谢谢


从文档中,

"[The wildcard query] matches documents that have fields matching a wildcard expression (not analyzed)".

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

1
2
3
4
5
6
7
8
9
10
11
12
13
{
 "query": {
   "bool": {
     "must": [
        {
         "query_string": {
           "query":"name:Rae*"
          }
        }
      ]
    }
  }
}