InnoDBで全文検索
今まではMySQL Fulltext IndexはMyISAMはサポートされているけど、InnoDBではサポートされていなかったと思うのですが、色々調べててMySQL5.6からサポートされるらしいってのを目にしたのでやってみた
http://dev.mysql.com/downloads/mysql から辿ってMySQL5.6をダウンロード。まだ開発版しかないので注意。今回使ってるマシンでやってるのでUbuntu用の.debパッケージを取ってくる。まぁ普通にdpkgでインストールしたら、/opt/mysql/server-5.6が出来てるのでMySQLをソースでインストールする際と同様にDBの初期化とかを行う
でsupport-filesってディレクトリにmysql.serverってファイルがあるので、これを/etc/init.dにコピーすればserviceコマンドで起動出来るのでコピーしとく。別にやんなくてもいいけど
んでちょっとした設定をうんにゃらしたら、結構ぶっ飛ぶけど適当にMySQL内にDBを作る。今回は既存する開発中のシステムのDBをそのまま使う。構造がこんな感じ
で上記のentryテーブルにFulltext Indexを付けて全文検索を出来るようにする。まぁ以前だと上に書いてる通りInnoDBだと出来なかったのだが
CREATE FULLTEXT INDEX インデックス名 ON テーブル名(カラム名)
で作る。で上の画像で出てる通り作る前と作った後だとFULLTEXT INDEXなのが表示されている。んじゃ全文検索やってみる
条件として「Androidを含んで、Fragmentが含まないもの」。SQLにすると
SELECT
title
FROM
entry
WHERE
MATCH(content)
AGAINST("+Android -Fragment" IN BOOLEAN MODE)
ORDER BY
id
という感じかな、多分。で実行すると
となる。んまぁまだ調整が必要なのかマッチ精度が微妙な感じはしますけど
とりあえずMySQL5.6からInnoDBでもFulltext Indexは使えるみたいっすね