我正在使用ElasticSearch,我有这样的字段:
"name": {
"type": "string",
"index": "not_analyzed"
},例如,我运行此查询以获取所有名为“Charles”的员工:
GET company_employee/employee/_search
{
"query": {
"bool": {
"must": [
{
"match_phrase": {
"name": "Charles"
}
}
]
}
}
}问题是,我需要得到一个不敏感的搜索。我需要检索所有的" ChaRleS ",即使我提供给查询的值es CHarles或charles,等等。我需要做什么?
发布于 2017-04-10 18:33:45
如果重新索引不是一个选项,这就会更改查询。
尽管雷杰普方法不允许搜索不区分大小写,但您可以“手动”进行搜索。
如果字符始终是第一个字母,您可以通过以下操作来完成:
GET company_employee/employee/_search
{
"query": {
"regexp": { "name": "[Cc]harles" }
}
}否则对“真”大小写不敏感:
GET company_employee/employee/_search
{
"query": {
"regexp": { "name": "[Cc][Hh][Aa][Rr][Ll][Ee][Ss]" }
}
}这绝不是有效的,但与不更改索引的约束相匹配。
发布于 2017-04-10 16:58:53
基本上,您需要对name字段进行分析,例如:
"name": {
"type": "text",
"analyzer": "standard"
}有了这样的映射,您的所有值都将被小写,因此搜索将不区分大小写。
https://stackoverflow.com/questions/43328837
复制相似问题