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)".
由于未对搜索词进行分析,因此在生成搜索查询之前,您基本上需要自己运行分析。在这种情况下,这仅意味着您的搜索词需要小写。或者,您可以使用
1 2 3 4 5 6 7 8 9 10 11 12 13 | { "query": { "bool": { "must": [ { "query_string": { "query":"name:Rae*" } } ] } } } |