レポート

いい肉の日に開催,Groonga Meatup 2015レポート ~今年は新たにPGroongaが仲間に

この記事を読むのに必要な時間:およそ 5 分

第2部:Groonga/Mroonga/PGroonga/Rroonga/...のよいところを紹介

第2部は,ユーザさんからの発表です。イベントページの発表者公募要項に『Groonga関連プロダクトを使っていて,⁠自分」がよいと思っていることを発表してください』とあるとおり,様々な発表がありました。

Mroongaをとある教育サービスで導入してみた話@sasata299さん

書籍Webエンジニアの教科書も出版している,からあげエンジニアの@sasata299さんの発表です発表資料⁠。

画像

それほど詳しくないけど,Classiという教育サービスでコンテンツの検索にMroongaを導入してみたとのことです。

Mroongaのよいところについては次の点を挙げました。

  • MySQLだけで全文検索できる。最近のMySQLでもできるけど,わかち書きとか前処理が面倒。
  • MySQLなのでわかりやすい。慣れている人も多いので運用が楽。

導入してみてはまったところについては,次の点を挙げました。

AND検索をどうやっていいかわからない

*D+というプラグマを使えば複数のキーワードであってもAND検索できるというのは,最初にひっかかるところなのかもしれません。MySQLは伝統的にOR検索なので+foo barというクエリはOR検索として扱われてしまいます。AND検索の場合+foo +barと記述しないといけませんが,それだと面倒なので,デフォルトで+にするための*D+というプラグマが用意されているようです。

CIの環境構築でしばしばコケる

CircleCIでCI環境を構築している場合,アップグレードのときなどにインストールでコケるという問題です。Mroongaはプラグインとして実装されていて,なおかつ特定のバージョンでのみ動作するようなパッケージのつくりになっているため,新しいMySQLのパッケージがリリースされると,Mroongaとのバージョンの不一致でインストールできないことがあります。

発表ではMySQLのバージョンを明示してapt-get installするというテクニックを紹介していました。yumなどでも同じようなことはできるので覚えておくと便利そうですね。

Rubyでプラグインを作れる分散全文検索エンジンDroonga(北市真さん)

EPUB Searcherのメンテナである北市真さん@KitaitiMakotoの発表です発表資料⁠。

画像

EPUB Searcherは,Droonga(どぅるんが)を使ってEPUBファイルを検索できるWebアプリケーションです。発表では,Droongaのよいところを中心に話がありました。

まず,Droongaについて簡単に説明しました。DroongaはGroongaに分散機能を追加したものです。クライアントとはHTTPで通信するようになっていて,そのままAPIとして公開することもできます。

分散機能はDroongaのよいところの一つです。分散機能の一つであるレプリケーションを使えば,同時接続数が増えたり,一部のサーバに障害が起こったりしても大丈夫といった利点があるようです ⁠レプリケーションについて詳しく知りたい方は,他の記事を参照してみてください⁠⁠。

Droongaのもう一つのよいところとして,Rubyでプラグインが書ける点を挙げました。Groongaのプラグインは基本的にC言語で書かれています。最近はmrubyでもプラグインを書けるようになりましたが,mrubyは素のRubyに比べるとできることが限られています。その点,Droongaは素のRubyでプラグインを書けるため,機能を追加しやすいです。

さらに,Droongaのプラグインを書く利点として,クライアントの変更に強いことを挙げました。ある機能をクライアント側で実装してしまうと,クライアントを変えたときにその機能を再実装する必要があります。Droongaのプラグインとして機能を実装することで,クライアントが変わってもその機能を使い続けられるのも利点の一つとのことでした。

なお,この発表では,StoboというWebブラウザベースのプレゼンテーションツールが使われました。Stoboには閲覧用URLを使った画面共有機能があります。誰かが画面をダブルクリックすると全員の画面にサムズアップマークが表示される演出があり,会場はたびたび盛り上がっていました。

MroongaとownCloudの良い関係@ukitiyanさん

@ukitiyanさんは「MroongaとownCloudの良い関係」と題してMroongaのよいところについて発表しました発表資料⁠。@ukitiyanさんはownCloud.jpの中の人です。

画像

最初にownCloudとはどういうものかという説明がありました。ownCloudは専用オンラインストレージを構築するためのオープンソースのパッケージソフトウェアだそうです。オンラインストレージというとDropboxを思い浮かべる人も多いかもしれませんね。

アップロードした文書を簡単に検索したいという需要があり,当初はSolrを想定していましたが,導入コストの問題から代替ソフトウェアを探したのがMroongaを使うようになるきっかけだったとのこと。

ownCloudのプラグインとしてsearch_luceneというのがすでにあったが,日本語検索できないことから採用を断念したそうです。

アップロードしたときのテキスト抽出はApache Tikaで実施してMroongaへと取り込み,全文検索を簡単に実現しています。

実際に,保険会社のコールセンターでownCloudにアップロードした応対資料(Excel)の検索に使われているそうです。追加の要望としてスニペット表示が必要になりましたが,Mroongaのスニペット機能を活用することで,ownCloudはフロントに注力できたと話していました。

WindowsでGroongaを使ったときの事例の紹介(村山さん)

村山さんはWindowsでGroongaを使う事例を発表しました。詳細については非公開でお願いしますとのことなので,このレポートでは紹介できないのが残念です。GroongaをWindowsでも安心して使えますよというのが印象に残る発表内容でした。

画像

Groongaでのタグ検索と表記揺れとの戦い(村上直也さん)

村上さん@naoa_yはGroongaのコアな部分に対してGitHubブログなどで情報発信をしています。

画像

発表では,次の事柄に対して,Groongaのタグ検索を活用していることを紹介しました発表資料⁠。

  • 特許商標書誌事項の検索
  • 特許商標のグループ/クロス集計

規模感については,それぞれ1000万レコードくらいのものを運用しているそうです。

Groongaのよいところとして,カラム指向かつ参照型が使えるため,ファセット検索(ドリルダウン)が高速であること,ベクターカラムでも高速な検索ができるのが嬉しいとのことでした。

参照型なので,付属するメタデータも一緒に一つのクエリで取得できるのもよいところだと挙げていました。

ただ,タグ検索でありがちなこととして表記揺れが多いとのことでした。ローマ字表記が特に顕著なのだそうです。表記揺れの具体例を「株式会社」で紹介していました。

  • KABUSHIKI KAISYA
  • KABUSHIKI KAISHA
  • KABUSHIKI GAISHA

こういうケースにも負けない検索をしたいということで,groonga-term-similarという表記揺れを抽出するプラグインを開発したとのことです。

このプラグインでは,次のような工夫をしたそうです。

  • Patricia Trieで前方一致検索を使って類似度の計算量を削減
  • 編集距離(Damerau-Levenshtein distance)と組み合わせる
  • qwerty配置のキーボード距離も考慮する
  • DF(Document frequency)が高いものを選ぶようにする

これらの工夫によりおおむね正しい単語を抽出できるようになったことを示していました。

表記揺れは,グループ集計などで問題になるため,groonga-tag-synonymというタグの同義語変換などに利用できるプラグインも開発されたそうです。

Groongaのよいところとして,⁠C/C++で開発できる」⁠mrubyでもプラグインを開発できる」という点を挙げ,今後はあいまい検索もしてみたいとのことでした。

著者プロフィール

横山昌史(よこやままさふみ)

株式会社クリアコード所属。札幌でオープンソース活動を趣味にしていたら,いつの間にか東京でフリーソフトウェアを仕事にしていた。好きなプログラミング言語はRubyで,RroongaとSinatraでRSSフィードリーダーを作ったり,Ruby/GTK3でファイルビューアーを作ったりしている。Rabbitコミッター。

Twitter@myokoym


HAYASHI Kentaro (kenhys)

株式会社クリアコード所属。以前肉の日のGroongaやMroongaのリリースを担当していたことも。趣味であれこれSylpheed - 軽快で使いやすいオープンソースのメールソフトのプラグインを開発している。

Twitter@kenhys