2016-07-07 79 views
0

我正在嘗試爲我正在使用的項目使用elasticsearch設置。我不知道是否有人能夠幫助他們在正確的方向前進。我使用的索引有1億多條記錄。
如果我需要能夠通配符查詢類似如下:Elasticsearch通配符搜索電子郵件地址?

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

當我嘗試使用通配符和其它的搜索,我沒有得到完全預期的結果。

使用elasticsearch進行什麼類型的搜索應該考慮實現? ElasticSearch甚至是正確的工具嗎?我從中得出的是Mysql,所以如果沒有,我可能會考慮使用Sphinx或Solr。

+0

對於電子郵件搜索,我建議這種方法:http://stackoverflow.com/questions/30115867/elasticsearch-analyzer-and-tokenizer-for-emails –

回答

2

我假設您已經按照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標記器的自定義分析器。

相關問題