Groongaで学ぶ全文検索 2015-10-02 に参加した

cf. https://groonga.doorkeeper.jp/events/31859

どう使うか見てみよう !

参加者全員から「今の知識」と「どういう知識をつけられたらうれしいか」を聞いて内容を決め た結果を反映し
今日は使ってみる !
受講者は Rails が身近だということで、講師のチョイスで題材は Mroonga となった。

シンプルに全文検索

Rails + MySQL で、全文検索してみる。LIKE 検索である。
LIKE 検索を全文検索だと捉えたことがなかったので新鮮だった。

MySQL では LIKE 検索を逐次検索として処理する。
このため、検索対象が増えると遅くなる
検索エンジン考えるとき、検索に 1 秒かかるかどうかがひとつの判断基準)

閑話休題

MySQL との接続でトラブルあったが、以下で解消。
Rails mysql2でrake db:createがエラー問題 - Qiita

では、全文検索 !

Mroonga インストール。Mac OS X なら homebrew でインストールできる。

brew install https://raw.github.com/mroonga/homebrew/master/mroonga.rb --use-homebrew-mysql

インストールが済んだら、MySQL のストレージエンジンを Mroonga へ差し替える。
InnoDB へ Add-On するようなイメージを勝手にもっていたが
Mroonga は ストレージエンジン なので 差し替え になる。

ALTER TABLE table_name ENGINE = mroonga
  • インデックス作成
    • RDBMS と同じにインデックス張るだけ。
CREATE FULLTEXT INDEX index_name ON table_name(column_name, ...)
  • MySQL全文検索構文で問い合わせる(MATCH AGAINST)
    • MySQL の構文は面倒い、トノコト
      • 下記、...A B C と入れると、AND 検索としてほしいところだが A OR B OR C の解釈で全文検索される。
        AND 検索させたいなら +A +B +C となる。
SELECT * FROM table_name WHERE MATCH(column_name) AGAINST("..." IN BOOLEAN MODE)

まとめ

  • LIKE 検索も全文検索である
  • Mroonga は全文検索が得意なストレージエンジンである
  • 今回、コーディングは がく さんが行ってくれました。さすがよちよチスト。ありがとうございました。