Rails + Elasticsearch + searchkick

2016年在一次分享會上看到了 searchkick 這個方便的東西,只要一些簡單的設定就可在 Rails 上快速取用 Elasticsearch.

以前剛寫PHP時也有串過 elasticsearch,但是並沒有做過太多的琢磨,預設就好好用了!?

前些時段剛好規劃做個商品搜尋,順便直接實作 searchkick 的搭配,在這邊做個筆記.

基本上會動到幾個部分:主機環境、searchkick基本設定、前後端程式.

環境是使用 docker,基本為一個 web container、一個為 elasticsearch container (elasticsearch 記憶體要求預設2G,低於的話服務會起不來).

docker-compose.yml 可以參考官方文件做修改,network的部分記得與原環境綁再一起,以免連不到.

  1. 安裝 searchkick 並在想被搜尋的 model 新增"searchkick"
  2. setting elasticsearch host & setting search_data
  3. 進行 rake searchkick:reindex:all
  4. 可用 postman 或網頁查看 elasticsearch 資料是否正確建立(e.g. 0.0.0.0:9200/_search)
  5. 最後就可以寫 code 串接了

細節設定 slide 跟 github 都介紹得很完整了,以下幾點使用上的心得.

  • reindex_async 會直接派給 delay_jobs,在後端處理效果很明顯
  • 有 devops 基本也只需要動到 host setting
  • 文件中提到的套件在效能上使用後有得到提升
  • 簡單設定欄位優先值,有助於搜尋結果的準確度
  • Partial Matches!因為我的商品名大多都很長有中文有英文,預設有些查詢結果不是很滿意,使用 word_middle 後整個神清氣爽

searchkick 可以少寫很多接發資料的程式碼,但在預設的查詢結果上可能會跟原本的 elasticsearch的結果會不同,可以在設定時多多比較一下.