読者です 読者をやめる 読者になる 読者になる

Carpe Diem

備忘録。https://github.com/jun06t

全文検索エンジン「mroonga」のインストール

MySQL
groongaというSQLの検索クエリを高速化させるための検索エンジンがあります。 Like文で検索させるよりも圧倒的に検索速度が向上します。 今回はgroongaのMySQL用ストレージエンジンであるmroongaをインストールしてみる。 ※今回はUbuntu12.04でのインストールです。 まずは公式のインストールドキュメントにそってインストール。 ※しばしばMySQLのバージョンが更新されると使えなくなる」という報告が上がっていますが、作者さんがそれに応じて対応してくださるようなのでUbuntuはあまり心配せず導入できます。 ◆インストール パッケージのリストの追加 $ sudo emacs -nw /etc/apt/sources.list.d/groonga.list deb http://packages.groonga.org/ubuntu/ precise universe deb-src http://packages.groonga.org/ubuntu/ precise universe キーリング等登録してインストール $ sudo apt-get update $ sudo apt-get -y --allow-unauthenticated install groonga-keyring $ sudo apt-get update $ sudo apt-get -y install mysql-server-mroonga トークナイザーとして MeCab を利用したい場合はgroonga-tokenizer-mecabをインストール $ sudo apt-get -y install groonga-tokenizer-mecab ◆インストール確認 MySQLにログインして以下のようにmroongaがあったらOK mysql> SHOW ENGINES;
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| mroonga | YES | CJK-ready fulltext search, column store | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
◆動作確認 動作を確認するために適当なテーブルを作成します。 mysql> create database test; Query OK, 1 row affected (0.00 sec) mysql> use test; Database changed mysql> CREATE TABLE diaries (     ->    id INT PRIMARY KEY AUTO_INCREMENT,     ->   content VARCHAR(255),     ->   FULLTEXT INDEX (content)    #カラムの検索に検索エンジン用のインデックスを貼る     -> ) ENGINE = mroonga DEFAULT CHARSET utf8;    #ストレージエンジンにmroongaを使用する Query OK, 0 rows affected (0.09 sec) mysql> INSERT INTO diaries (content) VALUES ("明日の天気は晴れでしょう。"); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO diaries (content) VALUES ("明日の天気は雨でしょう。"); Query OK, 1 row affected (0.00 sec) 実際に検索してみます。 mysql> SELECT * FROM diaries WHERE MATCH(content) AGAINST("晴れ");
+----+-----------------------------------------+
| id | content                                 |
+----+-----------------------------------------+
|  1 | 明日の天気は晴れでしょう。 |
+----+-----------------------------------------+
1 row in set (0.00 sec)
これは以下のLike文と同義です。 mysql> SELECT * FROM diaries WHERE content like "%晴れ%"; 基本的な使い方は「groongaチュートリアル」を参考にしてください。 ソース: UbuntuのMySQLに検索エンジン「mroonga(groonga)」をインストールしてみる Ubuntu 12.10 へ mroonga をインストールする