elasticsearch - 不区分大小写不起作用

标签 elasticsearch nest

我不明白为什么我的搜索区分大小写。我读过的所有内容都说 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/

相关文章:

elasticsearch - 如何在docker-compose中让 “RUN”命令类似于dockerfile?

elasticsearch - Elasticsearch : Difference between include & filter in aggregation query

c# - 在 ElasticSearch 上使用 NEST - 我如何使用部分填充的对象作为搜索条件

elasticsearch - 在哪里设置ElasticSearch请求超时?

elasticsearch - Elastic Search 1.7.5中有哪些重大更改?

elasticsearch - elasticsearch 中的默认索引分析器

elasticsearch - 在 kibana 4 中通过查询运行一个简单的 sql 组

elasticsearch - 如何标准化 ElasticSearch 分数?

templates - 创建针对特定索引ES 6.x的Elasticsearch模板

lucene - ElasticSearch 构面计数与总项目不匹配