在弹性搜索中搜索文本,忽略大写和小写字母

时间:2017-10-11 08:10:33

标签: elasticsearch

首先,我是弹性搜索新手。我有字段skillName:"Android Sdk"。我在弹性搜索中将此字段映射为keyword。但问题是,当我搜索类似

的东西时
POST _search
 {
 "query": {
 "match" : { "skillName" : "Android sdk" } 
 }
}

sdk在搜索查询中很小。它没有给我任何结果。当字段被映射为关键字

时,如何搜索忽略文本的大写或大写

4 个答案:

答案 0 :(得分:1)

要在关键字字段中搜索不区分大小写,您需要使用5.2.0中引入的normalizer。有关示例,请参阅here

答案 1 :(得分:1)

是的,它忽略了与原版不同的情况,因为您使用了keyword分析器,它没有对令牌做任何事情,而是保留原样。在您的情况下,只有在您查询完全相同标记

时才会进行匹配

因此,我建议更改此行为并至少应用lowercase令牌过滤器,这样您就可以将术语与不同的注册表匹配。

答案 2 :(得分:1)

您可以将不同的分析仪应用于相同的“字段”,并使用一个用于全文搜索,另一个用于排序,聚合。

答案 3 :(得分:0)

尝试以下方法:

{
  "query": {
    "query_string": {
      "fields": [
        "skillName"
      ],
      "query": "Android sdk"
    }
  }
}