[Rails] ElastichSearch全文檢索在rails中使用分析
ElastichSearch 在 rails 中使用分析
GEM
原理
ElastichSearch-rails的原理,是先把你指定的model中的資料轉成json格式,再做全文檢索(基本上就是純文字比對,所以速度比關聯式資料庫快很多),待找到資料後,再回傳這些資料的primary key給原本的model去做where的搜尋,所以其實最後還是會用到where,只是是直接指定id去找,比用like快多了。
步驟比較
下列是步驟的簡易比較表格,可以發現 ElastichSearch 就是拉出來處理的意思。
Step | ElastichSearch | Model.where() |
---|---|---|
1. | 將Model資料轉json檔 | - |
2. | 以json檔做全文檢索(純文字比對) | - |
3. | 回傳給找到的id1、id2… | - |
4. | Model.where( xxx in(‘id1’, ‘id2’..)) | Model.where( yyy like “關鍵字%” ) |
分析
看出來了嗎,看起來各有利弊,接下來就是『前置步驟時間』與『IN和LIKE搜尋差異時間』的拉鋸戰。
# | ElastichSearch | Model.where() |
---|---|---|
1. | 有前置步驟(step.123) | 無前置步驟 (((勝!))) |
2. | 用 “IN” 搜尋 (((勝!))) | 用 “LIKE” 搜尋 |
結論
因為這邊已知,關聯式資料庫,在資料量龐大時,LIKE效率極差無比,因此可以做出以下大致結論。
資料量大時,應採用: ElastichSearch
通常資料量很大的情況下,LIKE 非常沒效率,1、2、3 步驟的時間相對來說可以忽略,所以採取 ElastichSearch 方案。
資料量小時,應採用: Model.where()
通常資料量不大的情況下,LIKE 速度也不會差到哪裡去,那麼使用 ElastichSearch 無疑是脫褲子放屁,不只浪費記憶體、還增加程式維護量。
留言