2017-04-10 124 views
0

使用ElasticSearch IM,我有这个字段:不区分大小写查询

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

我运行此查询获得,例如,所有员工的名字“查尔斯”:

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

的与此问题是,我需要得到一个不敏感的搜索。我需要检索所有“Charles”,即使我提供给查询的值是ChaRleS或charles,或CHarles等。我需要做什么?

回答

0

基本上你宁愿需要有你name领域进行分析,即是这样的:

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

有了这样的映射所有的值将是小写,因此搜索将不区分大小写。

+0

我需要不区分大小写!但不是!当我查询查尔斯时,我得到了结果。当我查询查尔斯时,我不知道! –

+0

您是否可以使用上述索引映射重新创建索引? –

+0

对不起,我快速阅读了您的答案;) 我无法重新映射。没有其他解决方案?没有什么可以添加到查询来完成它? –

0

如果重建索引是不是一种选择,这留下改变您的查询

虽然regexp方法不允许搜索不区分大小写的,你可以这么“手动”做。

如果字符总是第一个字母,你可以用这个度日:

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

这是没有办法有效,但匹配你的约束不改变索引。