1. groonga

    Posted

    groonga
Changes in title
+mroongaでベクタカラムを使ってタグ検索を実現するには
Changes in tags
+mroonga
3.06
Changes in body
Source | HTML | Preview
@@ -0,0 +1,91 @@
+> もっとgroongaを知ってもらおう!ということで週刊groongaをはじめました。毎週木曜にgroongaやmroonga、rroongaのトピックを投稿予定です。
+
+[gihyo.jp](http://gihyo.jp/)さんでgroongaの隔週更新連載が始まっています。第8回の記事も公開されたので、一読をおすすめします。
+
+* [「第9回 mroongaを広く使ってもらうために大事なこと - mroongaのパッケージング動向の紹介」](http://gihyo.jp/dev/clip/01/groonga/0009)
+
+第1回から第8回までの過去記事については、[隔週連載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テーブルにタグをつけて検索する、というのを例にしましょう。
+
+サンプルのスキーマは次の通りです。
+
+```
+CREATE TABLE Tags (
+ name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+ COLLATE=utf8_bin
+ COMMENT='default_tokenizer "TokenDelimit"';
+
+CREATE TABLE Bugs (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ tags TEXT COMMENT 'flags "COLUMN_VECTOR", type "Tags"'
+) DEFAULT CHARSET=utf8;
+```
+
+ポイントはgroongaのベクターカラムを使っていることと、デフォルトのトークナイザーを指定していることです。
+
+タグを空白区切りで格納するので、TokenDelimitをデフォルトのトークナイザーとして指定しています。また、空白区切りで格納されたタグをベクターカラムとして扱うようにCOMMENTで指定しています。
+
+```
+tags TEXT COMMENT 'flags "COLUMN_VECTOR", type "Tags"'
+```
+
+typeにはタグの参照先となるテーブル名を指定します。このサンプルではTagsテーブルです。
+
+では、サンプルデータを投入してみましょう。
+
+```
+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);
++----+---------------------+
+| 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);
++----+-----------------+
+| id | tags |
++----+-----------------+
+| 2 | mroonga |
+| 3 | groonga mroonga |
++----+-----------------+
+2 rows in set (0.00 sec)
+```
+
+こちらも、mroongaタグに含むものを検索できていることがわかります。
+
+# まとめ
+
+今回は、mroongaでベクターカラムを使ってタグ検索を実現する方法を紹介しました。
+
+mroongaの基本的な動作を知るための[ユーザガイド](http://mroonga.org/ja/docs/userguide.html)もあります。インストールしたら試してみてください。