我不明白为什么我的搜索区分大小写。我读过的所有内容都说 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
}
有人知道这里出了什么问题吗?
谢谢
最佳答案
来自documentation ,
"[The wildcard query] matches documents that have fields matching a wildcard expression (not analyzed)".
因为搜索字词未被分析,您基本上需要在生成搜索查询之前自行运行分析。在这种情况下,这仅意味着您的搜索词需要小写。或者,您可以使用 query_string
:
{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "name:Rae*"
}
}
]
}
}
}
关于elasticsearch - 不区分大小写不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17266830/