Elasticsearch通配符搜索电子邮件地址?

问题描述:

我正在尝试为我正在使用的项目使用elasticsearch设置。我不知道是否有人能够帮助他们在正确的方向前进。我使用的索引有1亿多条记录。
如果我需要能够通配符查询类似如下:Elasticsearch通配符搜索电子邮件地址?

b*[email protected] 
b*[email protected]*.com 
*[email protected] 
br*gu*@gmail.com 
*g*@* 

当我尝试使用通配符和其它的搜索,我没有得到完全预期的结果。

使用elasticsearch进行什么类型的搜索应该考虑实现? ElasticSearch甚至是正确的工具吗?我从中得出的是Mysql,所以如果没有,我可能会考虑使用Sphinx或Solr。

+0

对于电子邮件搜索,我建议这种方法:http://*.com/questions/30115867/elasticsearch-analyzer-and-tokenizer-for-emails –

我假设您已经按照here所述的方法试用了通配符查询。

但是,如果您的电子邮件被分析而不是分析,它会有非常不同的行为。我建议你删除你的索引并改变你的映射。例如

PUT /emails 
{ 
    "mappings": { 
     "email": { 
      "properties": { 
       "email": { 
       "type": "string", 
       "index": "not_analyzed" 
      } 
     } 
    } 
    } 
} 

一旦你有了这个,你可以做普通的通配符查询或query_string。例如

GET emails/_search 
{ 
    "query": { 
    "wildcard": { 
     "email": { 
     "value": "s*com" 
     } 
    } 
    } 
} 

顺便说一句,如果你不将其设置为not_analyzed只是指数的电子邮件,默认的映射实际上分裂了从域名的电子邮件前缀,所以这就是为什么你没有得到结果,当你做S代表* @ gmail.com。你仍然会得到s *或* gmail.com的结果,但对于你的情况,使用not_analyzed可以正常工作。如果您要支持不区分大小写,那么您可能需要查看使用如here所述的uax_url_email标记器的自定义分析器。