CentOS6.5でMariaDBに新しくバンドルされた全文検索エンジンMroongaを使う

先月、[MariaDBにMroongaがバンドル](http://mroonga.org/ja/blog/2014/11/29/release.html)されたので、早速インストールしてみました。

まだ[公式ドキュメント](mroonga.org/ja/docs/install/centos.htm)に手順がなかったので調べながらでしたが、それでも30分かからずに終わったので感動的でした。

# 環境
<dl>
  <dt>CentOS :</dt>
  <dd>6.5</dd>
  <dt>MariaDB:</dt>
  <dd>10.0.15</dd>
  <dt>Mroonga:</dt>
  <dd>4.06</dd>
</dl>

# 手順
## 最初に各種パッケージを最新にアップデート

```bash:
$ sudo yum update -y
```

## MariaDBの導入

Mroongaがバンドルされている、10.0.15をインストールします。

```bash:リポジトリの追加
$ sudo rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

$ sudo vi /etc/yum.repos.d/mariadb.repo
$ cat /etc/yum.repos.d/mariadb.repo
------------------------------
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0.15/centos6-x86
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
enabled=0
------------------------------
```

```bash:インストール
$ sudo rpm -e --nodeps mysql-libs    # mysql-libsは干渉するので先に消しておきます。

$ sudo yum install -y --enablerepo=mariadb MariaDB-devel MariaDB-client MariaDB-server
```

```bash:起動確認
$ sudo service mysql start   # MariaDBでもmysqlなのね…

$ sudo /usr/bin/mysqladmin -u root password 'mysqlpass'
$ sudo /usr/bin/mysqladmin -u root -h v157-7-239-240.z1d8.static.cnode.jp password 'mysqlpass'

$ mysql -uroot -pmysqlpass
> exit
```

MariaDBのインストールはこれでOKです。

適宜、必要に応じてmy.cnfを編集してください。

## Mroongaを有効にする

MariaDBにバンドルされているMroongaはデフォルトでは無効状態となっています。
これを有効にしてあげます。

念のため、本当に無効になっているのか確認。

```mysql:事前確認
SHOW ENGINES;
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                                    | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| CSV                | YES     | CSV storage engine                                                         | NO           | NO   | NO         |
| MRG_MyISAM         | YES     | Collection of identical MyISAM tables                                      | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                  | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears)             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                                      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
| ARCHIVE            | YES     | Archive storage engine                                                     | NO           | NO   | NO         |
| FEDERATED          | YES     | FederatedX pluggable storage engine                                        | YES          | NO   | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                         | NO           | NO   | NO         |
| Aria               | YES     | Crash-safe tables with MyISAM heritage                                     | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
10 rows in set (0.00 sec)
```

一覧に表示されないという事から、無効になっていると確認できます。

以下のコマンドで有効化します。

```mysql:Mroongaの有効化
INSTALL PLUGIN Mroonga SONAME 'ha_mroonga.so';
CREATE FUNCTION last_insert_grn_id RETURNS INTEGER SONAME 'ha_mroonga.so';
CREATE FUNCTION mroonga_snippet RETURNS STRING SONAME 'ha_mroonga.so';
CREATE FUNCTION mroonga_command RETURNS STRING SONAME 'ha_mroonga.so';
CREATE FUNCTION mroonga_escape RETURNS STRING SONAME 'ha_mroonga.so';
```

```mysql:事後確認
SHOW ENGINES;
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                                    | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| CSV                | YES     | CSV storage engine                                                         | NO           | NO   | NO         |
| MRG_MyISAM         | YES     | Collection of identical MyISAM tables                                      | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                  | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears)             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                                      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
| Mroonga            | YES     | CJK-ready fulltext search, column store                                    | NO           | NO   | NO         |
| FEDERATED          | YES     | FederatedX pluggable storage engine                                        | YES          | NO   | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                         | NO           | NO   | NO         |
| Aria               | YES     | Crash-safe tables with MyISAM heritage                                     | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                                     | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
11 rows in set (0.00 sec)
```

Mroongaが加わったことを確認できたら終わりです。
サーバの再起動は不要です。

びっくりするぐらい手軽です。

# 制約事項
インストールがとても簡単なバンドル版ですが、残念ながら、以下のような制約があります。

- TokenMecabが使えない。
- ~~MySQL由来のNormalizer(名前にMySQLと入ってる奴)が使えない。~~ 勘違いでした(2014/12/18追記)
- 10.0.15でバンドルされたMroongaは4.06なので、新機能のトークンフィルターが使えない。

結構、厳しいです。

これらの制約のため、バンドル版のMroongaはあくまで「お手軽に使いたい時」用という位置づけになりそうです。今の所。
こういった制約が受け入れられない方は、従来通り、ソースコードから入れましょう。[こちらの手順](http://qiita.com/miyamoton/items/24a06d1cc70aa9ceef7f)が参考になるかもしれません。