mroongaのWindows版を使うには

> もっとgroongaを知ってもらおう!ということで週刊groongaをはじめました。毎週木曜にgroongaやmroonga、rroongaのトピックを投稿予定です。

いよいよ、[gihyo.jp](http://gihyo.jp/)さんでgroongaの隔週更新連載が始まりました!! 
第7回の記事も公開されたので、一読をおすすめします。

* [「第1回 全文検索エンジンgroongaを紹介します！」](http://gihyo.jp/dev/clip/01/groonga/0001)
* [「第2回 groongaをRuby On Railsでも使ってみた ～chikamap.comの事例から」](http://gihyo.jp/dev/clip/01/groonga/0002)
* [「第3回 すべてのMySQLユーザに高速な全文検索機能を！ - mroongaの紹介」](http://gihyo.jp/dev/clip/01/groonga/0003)
* [「第4回 rroongaを使ったソースコード検索エンジンMilkode」](http://gihyo.jp/dev/clip/01/groonga/0004)
* [「第5回 Rubyでサーバ要らずの高速全文検索！ - rroongaの紹介」](http://gihyo.jp/dev/clip/01/groonga/0005)
* [「第6回 [実録] MySQL向け全文検索エンジン「Tritonn」から「mroonga」への移行ガイド（1）」](http://gihyo.jp/dev/clip/01/groonga/0006)
* [「第7回 [実録] MySQL向け全文検索エンジン「Tritonn」から「mroonga」への移行ガイド（2）」](http://gihyo.jp/dev/clip/01/groonga/0007)

連載は始まりましたが、利用事例をどんどん紹介していきたいです。(利用事例のストックが尽きたら終了してしまいます。)
groongaやmroonga、rroongaを実際に使っていて利用事例記事を書いてもいいよ、という人をまだまだ募集しています。
詳細は[groonga普及のための協力のお願い](http://sourceforge.jp/projects/groonga/lists/archive/dev/2013-February/001186.html)を参照してください。

# はじめに

MySQLで高速に全文検索するためのオープンソースのストレージエンジンとして[mroonga](http://mroonga.org/ja/) (むるんが)を公開しています。
最新のバージョンは2013年6月29日にリリースした[3.05](http://mroonga.org/ja/docs/news.html#release-3-05-2013-6-29)です。

今回は、mroongaをWindowsで使う方法を紹介します。

# mroongaのWindows版について

mroongaは長らくLinux向けにのみパッケージを提供していました。そのため、mroongaはLinux専用というように思っている人がいるかも知れません。

しかし、テスト版の提供を経て、mroonga 3.05からは、Windows版の提供をはじめました。今後は毎月のリリースにWindows版も対象となります。
これにより、mroongaをより幅広いユーザに試してもらえるようになりました。

提供を始めたのはzipパッケージです。解凍するだけで、使えるようになります。まだインストーラ版は提供していないので、そのあたりは今後の課題です。

mroongaのWindows版では、MariaDBを一緒に配布しています。そのため、別途MySQLをインストールする必要はありません。
MariaDBを一緒に配布しているのは利便性もありますが、MariaDBの一部のソースコードを修正する必要があるというのがその理由です。

# mroongaのWindows版を使う

mroongaのWindows版では、2種類のzipパッケージを提供しています。32bit版と64bit版の2種類です。

特に理由がないのであれば、64bit版の使用をおすすめします。

それぞれのzipパッケージは以下からダウンロードすることができます。

* [mariadb-10.0.3-with-mroonga-3.05-win32.zip](http://packages.groonga.org/windows/mroonga/mariadb-10.0.3-with-mroonga-3.05-win32.zip)
* [mariadb-10.0.3-with-mroonga-3.05-winx64.zip](http://packages.groonga.org/windows/mroonga/mariadb-10.0.3-with-mroonga-3.05-winx64.zip)

zipパッケージをダウンロードしたら、任意のディレクトリに解凍します。zipアーカイブのサイズが約90MBと大きいので、それなりに解凍に時間がかかります。

解凍が終わったら、実際にMariaDBを起動しましょう。

cmd.exeを実行して、コマンドプロンプトを表示します。

解凍したディレクトリの``bin``以下に``mysqld.exe``があるので、コマンドプロンプトから以下のコマンドを実行してMariaDBを起動します。

```
bin\mysqld.exe --console
```

``--console``オプションをつけると起動過程を確認することができます。


```
D:\work\mroonga\mariadb-10.0.3-winx64>bin\mysqld.exe --console
130711 11:42:33 InnoDB: The InnoDB memory heap is disabled
130711 11:42:33 InnoDB: Mutexes and rw_locks use Windows interlocked functions
130711 11:42:33 InnoDB: Compressed tables use zlib 1.2.3
130711 11:42:33 InnoDB: CPU does not support crc32 instructions
130711 11:42:33 InnoDB: Initializing buffer pool, size = 128.0M
130711 11:42:33 InnoDB: Completed initialization of buffer pool
130711 11:42:33 InnoDB: highest supported file format is Barracuda.
130711 11:42:33 InnoDB: 128 rollback segment(s) are active.
130711 11:42:33 InnoDB: 10.0.3-MariaDB started; log sequence number 1603054
130711 11:42:33 [Note] Plugin &#39;FEEDBACK&#39; is disabled.
130711 11:42:33 [Note] Server socket created on IP: &#39;::&#39;.
130711 11:42:33 [Note] Event Scheduler: Loaded 0 events
130711 11:42:33 [Note] bin\mysqld.exe: ready for connections.
Version: &#39;10.0.3-MariaDB&#39;  socket: &#39;&#39;  port: 3306  Source distribution
```

MariaDBが起動できていることがわかります。

では、次にmysqlクライアントを使ってMariaDBに接続してみます。

別のcmd.exeを実行し、もうひとつコマンドプロンプトを開きます。

もうひとつのコマンドプロンプトで``mysql.exe``を実行し、起動済みのMariaDBへと接続します。

```
D:\work\mroonga\mariadb-10.0.3-winx64>bin\mysql.exe
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.0.3-MariaDB Source distribution

Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.

Type &#39;help;&#39; or &#39;\h&#39; for help. Type &#39;\c&#39; to clear the current input statement.

MariaDB [(none)]>
```

MariaDBに接続できていることがわかります。

では、mroongaのセットアップができていることを確認しましょう。

確認には``show engines``を使います。


```mysql
MariaDB [(none)]> show engines;
+--------------------+---------+------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment            | Transactions | XA   | Savepoints |
+--------------------+---------+------------------------------------------------------------+--------------+------+------------+
| CSV                | YES     | CSV storage engine            | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema            | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables  | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine            | NO           | NO   | NO         |
| MRG_MyISAM         | YES     | Collection of identical MyISAM tables            | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
| mroonga            | YES     | CJK-ready fulltext search, column store            | NO           | NO   | NO         |
| Aria               | YES     | Crash-safe tables with MyISAM heritage            | NO           | NO   | NO         |
+--------------------+---------+------------------------------------------------------------+--------------+------+------------+
8 rows in set (0.00 sec)

MariaDB [(none)]>
```

mroongaがプラグインとしてインストールされていることがわかります。

[インストール](http://mroonga.org/ja/docs/install.html#windows)のドキュメントでは、プラグインのインストールが必要みたいに書いていますが、zipパッケージでは実はこれはすでに対応済みです。
mroongaをすぐに使えるようになっています。

では、次にmroongaを試してみましょう。試すだけなので、``test``データベースを使います。

```mysql
MariaDB [(none)]> use test;
Database changed
MariaDB [test]> show tables;
Empty set (0.00 sec)
```

[ストレージモード](http://mroonga.org/ja/docs/userguide/storage.html)での動作を確認してみましょう。

```mysql
MariaDB [test]> CREATE TABLE diaries (id INT PRIMARY KEY AUTO_INCREMENT, content
 VARCHAR(255), FULLTEXT INDEX(content)) ENGINE = mroonga DEFAULT CHARSET utf8;
Query OK, 0 rows affected (0.38 sec)
```

まずは``diaries``テーブルを作りました。

```mysql
MariaDB [test]> INSERT INTO diaries (content) VALUES ("It&#39;ll be fine tomorrow.")
;
Query OK, 1 row affected (0.01 sec)

MariaDB [test]> INSERT INTO diaries (content) VALUES ("It&#39;ll rain tomorrow.");
Query OK, 1 row affected (0.00 sec)
```

テストデータを投入しました。

```mysql
MariaDB [test]> SELECT * FROM diaries WHERE MATCH(content) AGAINST("fine");
+----+-------------------------+
| id | content                 |
+----+-------------------------+
|  1 | It&#39;ll be fine tomorrow. |
+----+-------------------------+
1 row in set (0.01 sec)
```

全文検索もできていることがわかります。

もうすこし追加でデータを登録しましょう。

```mysql
MariaDB [test]> INSERT INTO diaries (content) VALUES ("It&#39;s fine today. It&#39;ll be fine tomorrow as well.");
Query OK, 1 row affected (0.00 sec)

MariaDB [test]> INSERT INTO diaries (content) VALUES ("It&#39;s fine today. But it&#39;ll rain tomorrow.");
Query OK, 1 row affected (0.00 sec)
```

追加でデータを登録したので、全文検索のマッチの度合いをスコアから確認してみましょう。以下のクエリを実行します。

```mysql
MariaDB [test]> SELECT *, MATCH (content) AGAINST ("fine") FROM diaries WHERE MATCH (content) AGAINST ("fine") ORDER BY MATCH (content) AGAINST ("fine")
 DESC;
+----+--------------------------------------------------+----------------------------------+
| id | content                                          | MATCH (content) AGAINST ("fine") |
+----+--------------------------------------------------+----------------------------------+
|  3 | It&#39;s fine today. It&#39;ll be fine tomorrow as well. |    233018 |
|  1 | It&#39;ll be fine tomorrow.                          |    116509 |
|  4 | It&#39;s fine today. But it&#39;ll rain tomorrow.        |    116509 |
+----+--------------------------------------------------+----------------------------------+
3 rows in set (0.00 sec)
```

複数マッチするほどスコアの値が大きいことがわかります。

ひとまず動作をさらっと確認できたので、MariaDBを終了させましょう。

一旦``mysql.exe``を終了します。

```mysql
MariaDB [test]> quit
Bye
```

次に、``mysqladmin.exe``を使ってシャットダウンします。

```
D:\work\mroonga\mariadb-10.0.3-winx64>bin\mysqladmin.exe -u root shutdown
```

これで、MariaDBの起動からmysqlクライアントでの接続、動作確認して、MariaDBの終了するところまでできました。

# まとめ

今回は、mroongaをWindowsで使う方法を紹介しました。

mroongaに興味を持ったなら、まずは[ダウンロード](http://mroonga.org/ja/docs/install.html#windows)して試してみてください。

mroongaの基本的な動作を知るための[ユーザガイド](http://mroonga.org/ja/docs/userguide.html)もあります。ダウンロードしたら試してみてください。