我正在使用ElasticSearch,我有这个字段:
"name": {
"type": "string",
"index": "not_analyzed"
},
我运行此查询以获取名为“Charles”的所有员工:
GET company_employee/employee/_search
{
"query": {
"bool": {
"must": [
{
"match_phrase": {
"name": "Charles"
}
}
]
}
}
}
这个问题是我需要进行不敏感的搜索。我需要检索所有“查尔斯”,即使我提供给ChaRleS或查尔斯,或查尔斯等查询的价值,我需要做什么?
答案 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]" }
}
}
这绝不是有效的,但符合你不改变索引的约束。