MySQLで全文検索(mroonga)をインストールしてみた。(CentOS6.5)

mroongaのインストール

yumで入るみたいなので、そっち使う。

yum install centos-release-SCL
rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
yum makecache
yum install -y mysql mysql55-mysql-server
service mysql55-mysqld start
yum install -y mysql55-mroonga

MySQL5.5って少し古い気がするけど、一旦これで。

インストールできたと思いきや、、

INSTALL PLUGIN mroonga SONAME 'ha_mroonga.so';

これ叩かないと駄目だった。。

SHOW ENGINES;

Engineに、mroongaが追加されました。

yum install -y groonga-tokenizer-mecab
yum install -y install groonga-normalizer-mysql

これでようやくmroongaを使う準備ができました。

mroongaを使ってみる

-- DB作成
CREATE DATABASE hoge CHARACTER SET utf8;

-- hogeに切り替え
use hoge;

-- テーブルの作成
CREATE TABLE user (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `profile` VARCHAR(255),
  FULLTEXT INDEX (`profile`)
) ENGINE = mroonga COMMENT = 'engine "innodb"' DEFAULT CHARSET utf8;

てきとうなDBを作成して、userテーブルを追加してみました。
InnoDBを使いたかったので、ラッパーモードで。
PRIMARY KEYは必須です。

-- 追加
INSERT INTO user SET profile = '本日は晴天なり';
INSERT INTO user SET profile = '本日は雨天なり';
INSERT INTO user SET profile = 'これはテストなり';
INSERT INTO user SET profile = 'これはなりなり';
INSERT INTO user SET profile = 'これはなりなりなり';
INSERT INTO user SET profile = 'これはななななりなり';

-- 「は」を含むuserを取得
SELECT * FROM user WHERE MATCH(profile) AGAINST("は");

-- 「なり」を多く含む順に取得
SELECT *, MATCH (content) AGAINST ("なり") AS score FROM user WHERE MATCH (content) AGAINST ("なり") ORDER BY score DESC;

今後、全文検索が必要な場合は、最初からmroongaを前提で設計した方がいいかもしれないなー。