InnoDBで全文検索

2012-07-22T00:00:00+09:00 MySQL

今までは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は使えるみたいっすね

Chrome Extension開発を勉強してみる (11) - 多階層なcontextMenus - Chrome Extension開発を勉強してみる (10) - chrome.privacy -