一尘不染

不区分大小写不起作用

elasticsearch

我无法弄清楚为什么我的搜索区分大小写。我读过的所有内容都说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
}

任何人都知道这是怎么回事?

谢谢


阅读 205

收藏
2020-06-22

共1个答案

一尘不染

文档中

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

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

{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "name:Rae*"
          }
        }
      ]
    }
  }
}
2020-06-22