1. zaubermaerchen
Changes in body
Source | HTML | Preview
@@ -1,93 +1,93 @@
> gihyo.jpの[隔週連載groonga](http://gihyo.jp/dev/clip/01/groonga)も参考になりますよ。
# はじめに
MySQLで高速に全文検索するためのオープンソースのストレージエンジンとして[mroonga](http://mroonga.org/ja/) (むるんが)を公開しています。
最新のバージョンは2013年7月29日にリリースした[3.06](http://mroonga.org/ja/docs/news.html#release-3-06-2013-7-29)です。
今回は、mroongaでベクターカラムを使ってタグ検索を実現する例を紹介します。
# タグ検索のためのサンプル
-Bugsテーブルにタグをつけて検索する、というのを例にしましょう。
+bugsテーブルにタグをつけて検索する、というのを例にしましょう。
サンプルのスキーマは次の通りです。
```
-CREATE TABLE Tags (
+CREATE TABLE tags (
name VARCHAR(64) PRIMARY KEY
) ENGINE=mroonga DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='default_tokenizer "TokenDelimit"';
-CREATE TABLE Bugs (
+CREATE TABLE bugs (
id INT PRIMARY KEY AUTO_INCREMENT,
- tags TEXT COMMENT 'flags "COLUMN_VECTOR", type "Tags"',
- FULLTEXT INDEX bugs_tags_index(tags) COMMENT 'table "Tags"'
+ tags TEXT COMMENT 'flags "COLUMN_VECTOR", type "tags"',
+ FULLTEXT INDEX bugs_tags_index(tags) COMMENT 'table "tags"'
) ENGINE=mroonga DEFAULT CHARSET=utf8;
```
ポイントはGroongaのベクターカラムを使っていることと、デフォルトのトークナイザーを指定していることです。
タグを空白区切りで格納するので、TokenDelimitをデフォルトのトークナイザーとして指定しています。また、空白区切りで格納されたタグをベクターカラムとして扱うようにCOMMENTで指定しています。
```
-tags TEXT COMMENT 'flags "COLUMN_VECTOR", type "Tags"'
+tags TEXT COMMENT 'flags "COLUMN_VECTOR", type "tags"'
```
-typeにはタグの参照先となるテーブル名を指定します。このサンプルではTagsテーブルです。
+typeにはタグの参照先となるテーブル名を指定します。このサンプルではtagsテーブルです。
ベクターカラムに格納されたタグを転置索引を使って高速に検索するために、tagsカラムに対してFULLTEXT INDEXを設定します。
```
-FULLTEXT INDEX bugs_tags_index(tags) COMMENT 'table "Tags"'
+FULLTEXT INDEX bugs_tags_index(tags) COMMENT 'table "tags"'
```
-tableにはタグの参照先となるテーブル名を指定します。このサンプルではTagsテーブルです。
+tableにはタグの参照先となるテーブル名を指定します。このサンプルではtagsテーブルです。
では、サンプルデータを投入してみましょう。
```
-INSERT INTO Bugs (tags) VALUES ("Linux MySQL groonga");
-INSERT INTO Bugs (tags) VALUES ("mroonga");
-INSERT INTO Bugs (tags) VALUES ("groonga mroonga");
+INSERT INTO bugs (tags) VALUES ("Linux MySQL groonga");
+INSERT INTO bugs (tags) VALUES ("mroonga");
+INSERT INTO bugs (tags) VALUES ("groonga mroonga");
```
# タグ検索してみる
サンプルデータも投入できたので、実際にタグ検索をしてみましょう。
groongaでまずは検索してみます。
```
-mysql> select * from Bugs where match(tags) against("groonga" IN BOOLEAN MODE);
+mysql> select * from bugs where match(tags) against("groonga" IN BOOLEAN MODE);
+----+---------------------+
| id | tags |
+----+---------------------+
| 1 | Linux MySQL groonga |
| 3 | groonga mroonga |
+----+---------------------+
2 rows in set (0.00 sec)
```
きちんと、groongaをタグに含むものを検索できていることがわかります。
次はmroongaで検索してみます。
```
-mysql> select * from Bugs where match(tags) against("mroonga" IN BOOLEAN MODE);
+mysql> select * from bugs where match(tags) against("mroonga" IN BOOLEAN MODE);
+----+-----------------+
| id | tags |
+----+-----------------+
| 2 | mroonga |
| 3 | groonga mroonga |
+----+-----------------+
2 rows in set (0.00 sec)
```
こちらも、mroongaタグに含むものを検索できていることがわかります。
# まとめ
今回は、mroongaでベクターカラムを使ってタグ検索を実現する方法を紹介しました。
mroongaの基本的な動作を知るための[ユーザガイド](http://mroonga.org/ja/docs/userguide.html)もあります。インストールしたら試してみてください。