在SQL中,我可以使用SQL LIKE很好地搜索電子郵件地址。如何設置ElasticSearch來爲電子郵件地址執行SQL LIKE「%」?
通過電子郵件「[email protected]」,搜索「堆棧」,「@ domain.com」,「domain.com」或「域名」將使我回到期望的電子郵件地址。
我怎樣才能得到與ElasticSearch相同的結果?
我玩過nGram,edgeNGram,uax_url_email等,搜索結果一直很糟糕。請糾正我,如果我錯了,這聽起來像我必須做到以下幾點:
- 爲index_analyzer
- 使用「關鍵字」,「空格」或「uax_url_email」標記者這樣的電子郵件唐「噸得到標記化
- 但通配符查詢似乎不工作(與輪胎至少)
- 使用‘NGRAM’或‘edgeNGram’爲過濾
- 我總是會遇到太多不需要的結果,例如搜索「第一秒」時獲取「[email protected]」。
- 使用「關鍵字」,「空格」或「uax_url_email」標記者這樣的電子郵件唐「噸得到標記化
- 爲search_analyzer
- 不做NGRAM
一個實驗代碼
tire.settings :number_of_shards => 1,
:number_of_replicas => 1,
:analysis => {
:filter => {
:db_ngram => {
"type" => "nGram",
"max_gram" => 255,
"min_gram" => 3 }
},
:analyzer => {
:string_analyzer => {
"tokenizer" => "standard",
"filter" => ["standard", "lowercase", "asciifolding", "db_ngram"],
"type" => "custom" },
:index_name_analyzer => {
"tokenizer" => "standard",
"filter" => ["standard", "lowercase", "asciifolding"],
"type" => "custom" },
:search_name_analyzer => {
"tokenizer" => "whitespace",
"filter" => ["lowercase", "db_ngram"],
"type" => "custom" },
:index_email_analyzer => {
"tokenizer" => "whitespace",
"filter" => ["lowercase"],
"type" => "custom" }
}
} do
mapping do
indexes :id, :index => :not_analyzed
indexes :name, :index_analyzer => 'index_name_analyzer', :search_analyzer => 'search_name_analyzer'
indexes :email, :index_analyzer => 'index_email_analyzer', :search_analyzer => 'search_email_analyzer'
end
end
具體情況不很好地工作:
- 帶連字符的電子郵件(例如, [email protected])
- 查詢字符串「@」開頭或結尾
- 精確匹配
- 與像「@」變得非常意外的結果通配符搜索。
想是的。 「[email protected]」, 「[email protected]」 和 「[email protected],搜索 」AAA「 給我 」[email protected]「」 [email protected]。搜索「aaa *」給我所有的東西,但「aaa- *」沒有給我什麼。那麼,我應該怎麼做完全匹配通配符查詢?對於這些類型的查詢,對於不同的標記器/分析器,我得到的結果幾乎相同。 Model.tire.index.delete Model.tire.create_elasticsearch_index Model.tire.index.import型號:
我每次映射改變後做這些。所有
參考文獻:
- Configure ElasticSearch to use ngram by default. - SQL LIKE %% behavior
- http://euphonious-intuition.com/2012/08/more-complicated-mapping-in-elasticsearch/
相似的問題:https://stackoverflow.com/questions/44791075/in-elasticsearch-how-do-i-search-for-an-arbitrary-substring –