groongaのgoバインディングでWikipedia全文検索のサンプルウェブアプリを作ってみた
データ登録用にgroongaのC APIのgoバインディングを書いてみた · hnakamur’s blog at githubの続きで、APIを追加実装し、Wikipedia全文検索のサンプルウェブアプリを作ってみました。
ソースコード
ウェブアプリのソースは https://github.com/hnakamur/cgoroonga/tree/master/examples/search_wikipedia_webapp にあります。
GroongaのC APIについては7.20. API — Groonga v5.0.3ドキュメントを見つつ、ドキュメント化されていないものはgroongaのソースを見て、goバインディングを作りました。
goバインディングもウェブアプリもとりあえず全文検索の動作確認ができればいいやということで、ゆるい感じで書いています。
ウェブアプリのサーバサイドのソースは
https://github.com/hnakamur/cgoroonga/blob/master/examples/search_wikipedia_webapp/main.go
で、groongaのgoバインディングのソースは
https://github.com/hnakamur/cgoroonga
の *.go
です。
フロントエンドについては別記事で
フロントエンドは最速MVCフレームワークMithril.jsの速度の秘密 - Qiitaの記事を見て気になっていたので、Mithrilで書いてみました。こちらについては別記事mithril.jsを試してみたに書きました。
インデクスの作成
groongaコマンドで以下のようにして作成しました。約27分かかりました。
$ echo 'column_create --table ArticleIndexes --name article_index --flags COLUMN_INDEX|WITH_POSITION|WITH_SECTION --type Articles --source _key,text' | time groonga ~/work/groonga/db/wikipedia.db
[[0,1431052924.67975,1555.13576507568],true]
1660.80 real 1135.40 user 146.29 sys
Wikipediaのページタイトルと本文の両方を対象に検索したいので、 --source
には _keyカラム (タイトル) と text カラム (本文) の両方を指定しました。
検索の応答は約80〜250ms程度と満足な早さ
- 動作環境
- マシン: MacBook Pro 15inch (Retina, Mid 2012) SSD
- CPU: Intel Core i7 2.6GHz
- RAM: 16GB 1600MHz DDR3
- データサイズ
- データファイルの合計サイズ: 188MB
- データ件数: 約193万件
$ du -sm ~/work/groonga/db
18848 /Users/hnakamur/work/groonga/db
$ echo 'select Articles --limit 0' | groonga ~/work/groonga/db/wikipedia.db
[[0,1431434283.68242,0.00117397308349609],[[[1932736],[["_id","UInt32"],["_key","ShortText"],["text","Text"],["updated_at","Time"]]]]]
JSON形式の検索APIの応答が約80〜250ms程度で、快適に検索できました。 Groongaすごいですね!