不区分大小写的查询

时间:2017-04-10 16:52:00

标签: elasticsearch case-insensitive

我正在使用ElasticSearch,我有这个字段:

"name": {
      "type": "string",
      "index": "not_analyzed"
},

我运行此查询以获取名为“Charles”的所有员工:

GET company_employee/employee/_search
{
   "query": {
      "bool": {
         "must": [
            {
                "match_phrase": {
                   "name": "Charles"
                }
            }
         ]
      }
   }
}

这个问题是我需要进行不敏感的搜索。我需要检索所有“查尔斯”,即使我提供给ChaRleS或查尔斯,或查尔斯等查询的价值,我需要做什么?

2 个答案:

答案 0 :(得分:0)

基本上您需要对name字段进行分析,例如:

"name": {
  "type": "text",
  "analyzer": "standard"
}

通过这种映射,您的所有值都将更低,因此搜索将不区分大小写。

答案 1 :(得分:0)

如果无法重新编制索引,则会改变您的查询

尽管regexp方法不允许搜索不区分大小写,但您可以这样做"手动"。

如果角色永远是第一个字母,你可以用这个:

GET company_employee/employee/_search
{
   "query": {
         "regexp": { "name": "[Cc]harles" }
    }
}

否则为" true"不区分大小写的:

GET company_employee/employee/_search
{
   "query": {
         "regexp": { "name": "[Cc][Hh][Aa][Rr][Ll][Ee][Ss]" }
    }
}

这绝不是有效的,但符合你不改变索引的约束。