少於 1 分鐘閱讀

ElastichSearch 在 rails 中使用分析

GEM

ElastichSearch-rails

原理

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 無疑是脫褲子放屁,不只浪費記憶體、還增加程式維護量。

參考

  1. gem
  2. ElastichSearch權威指南

更新時間:

留言