我无法弄清楚为什么我的搜索区分大小写。我读过的所有内容都说ES默认情况下不敏感。我有一些映射,它们指定用于索引和搜索的标准分析器,但似乎有些东西还是区分大小写的,即通配符:
"query": { "bool": { "must": [ { "wildcard": { "name": { "value": "Rae*" } } } ] }
这失败了,但是“ 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()));
在这种情况下,它使用的是简单分析仪,但标准分析仪的结果相同。
映射如下所示:
name: { type: string analyzer: simple store: yes }
任何人都知道这是怎么回事?
谢谢
从文档中,
“ [[通配符查询]匹配具有与通配符表达式匹配 (未分析)的 字段的文档”。
由于未对 搜索词进行分析 ,因此您实质上需要在生成搜索查询之前 自行 运行分析。在这种情况下,这仅意味着您的搜索词需要小写。或者,您可以使用query_string:
query_string
{ "query": { "bool": { "must": [ { "query_string": { "query": "name:Rae*" } } ] } } }