groongagroonga(ぐるんが)と言えばオープンソースの全文検索エンジンだが、いわゆる「全文検索」だけでなく、1行のレコードに複数個付けられたタグを元に検索する「タグ検索」ができることが意外と知られていないようなので紹介したい。・tag一覧テーブル・tag付け管理テーブルを用意して、タグの管理が結構めんどくさなるケースが多いと思われるが、groonga使うと複数のtagをhash型として1つの列に格納して管理できるためかなり管理がシンプルになる。本エントリーでは仮想のデータを使用し、「タグ検索」が出来るようになるまでの手順を紹介したい。※尚、groongaの仕様やコマンドに関する細かい説明は省略するので、詳細については適宜groongaのドキュメントへのリンクを貼っておくのでそっちを見て下さい。1.groongaのインストールgroongaはwindoes,mac,各種linuxディストリビューションで使用可能で、ソースからコンパイルする以外にも環境別にバイナリが用意されていてインストールは凄く簡単。groongaもしmecabによる形態素解析を使いたい場合はmecabのパッケージと辞書が追加で必要になるので以下のコマンドを追加で実行。mecab-ipadicその他環境はここを参照2.groongaのデータファイルを作るgroongaはデータファイル単位でデータを管理する。1つのデータファイルの管理スコープとしては、MySQLで言うところのデータベース、Oracleで言うところの表領域、といった所か(私の理解では。/var/lib/groonga-db/homhom.db>成功するとgroonga対話モードに入る。終了する場合はquit。3.groongaのテーブルを作成するgroongaの利用方法は主に2つある1.対話モードでコマンドベースで使用2.サーバプロセスとして起動して,httpやmemcachedプロトコル経由で使用とりあえずここではテーブルを作るだけなので対話モードで操作する。サーバプロセスとして起動する場合についてはこちらを参照。各コマンドを入力した後に表示される[[0,1346510229.85158,0.0057990550994873],true]こんな感じのやつの一番右側がtrueになっていれば成功。失敗した場合はエラーメッセージが出る。4.データを挿入するgroongaのテーブルにデータを挿入するにはloadコマンドを使用する。データフォーマットはjsonなので、今回の場合は下記のようにする。video>[{"_key":"1","title":"\u52d5\u753b1","tag":["\u30a2\u30cb\u30e1","\u9b54\u6cd5\u5c11\u5973","\u65b0\u623f\u662d\u4e4b","\u865a\u6df5\u7384","\u84bc\u6a39\u3046\u3081","\u68b6\u6d66\u7531\u8a18","\u30b7\u30e3\u30d5\u30c8","\u60a0\u6728\u78a7","\u658e\u85e4\u5343\u548c","\u559c\u591a\u6751\u82f1\u68a8","\u6c34\u6a4b\u304b\u304a\u308a","\u91ce\u4e2d\u85cd","\u52a0\u85e4\u82f1\u7f8e\u91cc","\u5409\u7530\u8056\u5b50","\u65b0\u8c37\u826f\u5b50","\u5ca9\u7537\u6f64\u5b50","\u5f8c\u85e4\u9091\u5b50","\u5ca9\u6c38\u54f2\u54c9","\u98db\u7530\u5c55\u7537","\u4e09\u6728\u771e\u4e00\u90ce"]},{"_key":"2","title":"\u52d5\u753b2","tag":["\u6620\u753b","\u9b54\u6cd5\u5c11\u5973","\u5800\u798e\u4e00","\u4e95\u6238\u525b","\u3057\u306a\u306a\u6cf0\u4e4b","\u4f0a\u85e4\u5e78\u6bc5","\u9ad8\u6a4b\u9f8d\u8f1d","\u8c37\u5185\u91cc\u65e9","\u68ee\u7530\u6dbc\u82b1","\u7893\u4e95\u5c06\u5927","\u524d\u7530\u4e9c\u5b63","\u4f50\u85e4\u6075\u7f8e\u9999","\u5cb8\u672c\u9ebb","\u92e4\ufa11\u8cb4\u6597"]},{"_key":"3","title":"\u52d5\u753b3","tag":["\u30a2\u30cb\u30e1","\u5973\u5b50\u9ad8\u751f","\u9752\u6625","\u65c5\u9928","\u5b89\u85e4\u771f\u88d5","\u5cb8\u7530\u30e1\u30eb","\u6d5c\u53e3\u53f2\u90ce","P.A.WORKS","\u4f0a\u85e4\u304b\u306a\u6075","\u5c0f\u898b\u5ddd\u5343\u660e","\u8c4a\u5d0e\u611b\u751f","\u6238\u677e\u9065","\u80fd\u767b\u9ebb\u7f8e\u5b50","\u4e45\u4fdd\u7530\u6c11\u7d75","\u6d5c\u7530\u8ce2\u4e8c","\u9593\u5cf6\u6df3\u53f8","\u5c71\u53e3\u592a\u90ce","\u30c1\u30e7\u30fc","\u8acf\u8a2a\u90e8\u9806\u4e00","\u672c\u7530\u8cb4\u5b50","\u68b6\u88d5\u8cb4","\u7c73\u6fa4\u5186"]},{"_key":"4","title":"\u52d5\u753b4","tag":["\u30a2\u30cb\u30e1","\u5973\u5b50\u9ad8\u751f","\u9752\u6625","\u97f3\u697d","\u5c71\u7530\u5c1a\u5b50","\u304b\u304d\u3075\u3089\u3044","\u4eac\u90fd\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3","\u8c4a\u5d0e\u611b\u751f","\u65e5\u7b20\u967d\u5b50","\u4f50\u85e4\u8061\u7f8e","\u5bff\u7f8e\u83dc\u5b50","\u7af9\u9054\u5f69\u5948","\u771f\u7530\u30a2\u30b5\u30df","\u85e4\u6771\u77e5\u590f","\u6c38\u7530\u4f9d\u5b50"]},{"_key":"5","title":"\u52d5\u753b5","tag":["\u6620\u753b","\u5973\u5b50\u9ad8\u751f","\u9752\u6625","\u97f3\u697d","\u77e2\u53e3\u53f2\u9756","\u4e0a\u91ce\u6a39\u91cc","\u8cab\u5730\u8c37\u3057\u307b\u308a","\u672c\u4eee\u5c4b\u30e6\u30a4\u30ab","\u8c4a\u5cf6\u7531\u4f73\u68a8","\u5e73\u5ca1\u7950\u592a","\u95a2\u6839\u9999\u83dc","\u6c34\u7530\u8299\u7f8e\u5b50","\u3042\u3059\u304b","\u4e2d\u6751\u77e5\u4e16","\u6839\u672c\u76f4\u679d","\u677e\u7530\u307e\u3069\u304b","\u91d1\u5d0e\u7766\u7f8e","\u3042\u3079\u306a\u304e\u3055","\u9577\u5d8b\u7f8e\u7d17","\u524d\u539f\u7d75\u7406","\u4e2d\u6ca2\u306a\u3064\u304d","\u8fb0\u5df3\u5948\u90fd\u5b50"]},{"_key":"6","title":"\u52d5\u753b6","tag":["\u6620\u753b","\u30a2\u30cb\u30e1","SF","\u62bc\u4e95\u5b88","\u68ee\u535a\u55e3","\u5ddd\u4e95\u61b2\u6b21","Production","I.G","\u83ca\u5730\u51db\u5b50","\u52a0\u702c\u4eae","\u8c37\u539f\u7ae0\u4ecb","\u5c71\u53e3\u611b","\u5e73\u5ddd\u5927\u8f14","\u7af9\u82e5\u62d3\u78e8","\u9ea6\u4eba","\u5927\u585a\u82b3\u5fe0","\u5b89\u85e4\u9ebb\u5439","\u5175\u85e4\u307e\u3053"]},{"_key":"7","title":"\u52d5\u753b7","tag":["\u6620\u753b","\u6226\u4e89","\u7b2c\u4e8c\u6b21\u5927\u6226","\u30b9\u30c6\u30a3\u30fc\u30f4\u30f3\u30fb\u30b9\u30d4\u30eb\u30d0\u30fc\u30b0","\u30c8\u30e0\u30fb\u30cf\u30f3\u30af\u30b9","\u30a8\u30c9\u30ef\u30fc\u30c9\u30fb\u30d0\u30fc\u30f3\u30ba","\u30de\u30c3\u30c8\u30fb\u30c7\u30a4\u30e2\u30f3"]},{"_key":"8","title":"\u52d5\u753b8","tag":["\u6620\u753b","\u6226\u4e89","\u7b2c\u4e8c\u6b21\u5927\u6226","\u592a\u5e73\u6d0b","\u30b8\u30e7\u30f3\u30fb\u30a6\u30fc","\u30cb\u30b3\u30e9\u30b9\u30fb\u30b1\u30a4\u30b8","\u30a2\u30c0\u30e0\u30fb\u30d3\u30fc\u30c1","\u30af\u30ea\u30b9\u30c1\u30e3\u30f3\u30fb\u30b9\u30ec\u30fc\u30bf\u30fc","\u30b8\u30e5\u30fc\u30c9\u30fb\u30ed\u30a6"]},{"_key":"9","title":"\u52d5\u753b9","tag":["\u6620\u753b","\u6226\u4e89","\u7b2c\u4e8c\u6b21\u5927\u6226","\u30b9\u30bf\u30fc\u30ea\u30f3\u30b0\u30e9\u30fc\u30c9","\u30b8\u30e3\u30f3\uff1d\u30b8\u30e3\u30c3\u30af\u30fb\u30a2\u30ce\u30fc","\u30b8\u30e7\u30bb\u30d5\u30fb\u30d5\u30a1\u30a4\u30f3\u30ba","\u30a8\u30c9\u30fb\u30cf\u30ea\u30b9"]},{"_key":"10","title":"\u52d5\u753b10","tag":["\u30a2\u30cb\u30e1","\u5973\u5b50\u9ad8\u751f","\u9752\u6625","\u30d0\u30a4\u30af","HONDA","\u4f50\u85e4\u9806\u4e00","TYO\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u30ba","\u5f8c\u85e4\u6c99\u7dd2\u91cc","\u65e9\u898b\u6c99\u7e54","\u559c\u591a\u6751\u82f1\u68a8","\u5c0f\u6797\u3086\u3046","\u5100\u6b66\u3086\u3046\u5b50"]}][[0,1346514823.0177,0.00466108322143555],10][[0,1346514823.0177,0.00466108322143555],10]の一番右側の数字が挿入した件数を示す。次回のエントリーで実際にタグで検索する方法、及びプログラムから利用する方法について紹介する。(1)検索リンクGitHubseri::diary::graduate_schoolseri::diary::competitive_programmingはてなブログをはじめよう!serihiroさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。