不区分大小写的查询
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]" }
}
}
这绝不是高效的,但符合您不更改索引的限制条件。
我正在使用 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]" }
}
}
这绝不是高效的,但符合您不更改索引的限制条件。