【问题标题】:Case insensitivity does not work不区分大小写不起作用
【发布时间】:2013-06-20 10:47:21
【问题描述】:

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

"query": {
"bool": {
  "must": [
    {
      "wildcard": {
        "name": {
          "value": "Rae*"
        }
      }
    }
  ]
}

这会失败,但“rae*”可以按需要工作。我需要使用通配符进行“starts-with”类型搜索(我想)。

我正在使用 .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
}

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

谢谢

【问题讨论】:

  • 随着 ES (2.3) 的更新版本,您可以使用 Completion Suggester。
  • 我有同样的问题。即使尝试了“query_string”,它在 ES 5.1 中也不起作用,但在 2.3 中起作用。 !!!!

标签: elasticsearch nest


【解决方案1】:

来自documentation

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

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

{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "name:Rae*"
          }
        }
      ]
    }
  }
}

【讨论】:

  • 不知道用query_string好不好,不就是低级fn吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
相关资源
最近更新 更多