不区分大小写的查询

Case insensitive query

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

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

我运行这个查询得到,例如,名字为"Charles"的所有员工:

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

问题是我需要进行不敏感的搜索。我需要检索所有 "Charles",即使我提供给查询的值是 ChaRleS 或 charles,或 CHarles 等。我需要做什么?

基本上,您宁愿需要对 name 字段进行分析,即像这样:

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

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

如果重建索引不是一个选项,这将改变您的查询

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

如果字符总是第一个字母,你可以这样做:

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]" }
    }
}

这绝不是高效的,但符合您不更改索引的限制条件。