Webで全文検索というと、GoogleやYahoo!などの検索ポータルがなじみ深い。WebサイトにこうしたWeb検索のパーツを組み込むことも可能ではあるが、自分のサイトやアプリケーションでカスタマイズした全文検索機能を導入したい場合もある。その解決策の1つとなるのがオープンソースの全文検索エンジンの利用だ。
最近では「検索エンジン自作入門」という書籍も出ているように、オープンソースの検索エンジンを利用してサイトやアプリに独自の検索機能を組み込むことが可能となってきている。当日はこの本の著者が二人とも参加していた。
イベントでは冒頭にクリアコードの須藤功平氏がGroongaの全体概要について解説した。Groongaはオープンソースの検索エンジンの1つ。日本語検索に強く関連製品が充実していて人気がある。Groongaの特徴をキーワードで挙げると、即時更新、高い検索性能、日本語に特化した検索機能、他システムとの連携がある。
即時更新というのは、データベースにデータが追加されたら追加データが検索結果に即時に反映されるように、全文検索の索引も即時に更新されるということ。トランザクション系のシステムならデータを追加したらインデックスも即時更新されるのは当然ではあるが、全文検索のための索引は処理が重くなることから時間をおいて更新されることが少なくない。ところがGroongaは転置索引を用いた全文検索エンジンでありながら、即時に更新される。また更新している間も読み取りをブロックせず検索可能とできるのが特徴であり、強みとなっている。
それから日本語に特化した検索機能。海外で開発されているデータベースだと日本語の文字コードや言語的な構造などにより、検索結果が思わしくないという場合もある。しかしGroongaは日本で開発しているため、日本語に特化した検索機能が充実している。例えばローマ字で入力しても日本語のカナに変換して前方一致検索ができる。細かいことを言うと、ローマ字はヘボン式に対応していたり、日本語と英語が混じっていてもうまく言語を切り分けて検索するなど。利用者にとってはこの部分は検索クオリティを上げるために重要なところだ。
他システムとの連携の幅が広いのもGroongaの特徴になる。後述するが「Groonga族」とも呼ばれている。最も人気なのがMySQLとの連携だろう。MySQLのストレージエンジン「Mroonga」を使えば、MySQLでGroongaの全文検索機能が利用できる。MySQLを使う側からすると、MySQLを使いながらもSQLで日本語全文検索が利用できるのがメリットとなる。なおMroongaはMariaDB 10.0.15から正式にバンドルされるようになった。イベントでこの報告がなされると会場の参加者は一斉に拍手して歓迎と祝福の意を表した。
最後に技術的な特徴ではないが、Groongaは「にくの日」に定期リリースをするのも目立つ特徴となっている。2月9日にはメジャーバージョンアップ、毎月「29日」にアップデート、11月29日にはイベントを行うといった具合だ。イベント当日もGroonga 4.0.8、Mroonga 4.08、Droonga 1.0.8がそれぞれリリースされた。
Groongaを支えるGroonga族についても説明しておこう。Groonga族は「Xroonga」というように冒頭の1文字以外は共通の名前を持っている。読みは「○るんが」となる。MySQLでGroongaを使うための「Mroonga」(むるんが)、Rubyからアクセスするための「Rroonga」(るるんが)、分散処理のための「Droonga」(どぅるんが)などである。これはGroongaにはあらゆるアクセス方法がそろっているということであり、コミュニティの結束の強さでもある。
昨年から今年にかけて進展が目立つのがインメモリ処理のための「Grnxx」(ぐるんたす)と分散処理のための「Droonga」。
前者はGroongaとC++をかけた命名になっている。近年インメモリデータベースなどインメモリ処理が普及していることをうけ、開発が進められている。現時点ではGroongaのキャッシュとして扱うことが想定されている。正式版は来年の公開を目指しているとのこと。プレゼンの後に「どのような機能があったらうれしいですか?」と開発者が会場に聞くなど、ユーザーの声を反映したものにしたいという意向が強いようだ。
後者のDroongaは「Distributed Groonga」ということで「D」を頭文字としている。Groongaをベースにした分散データ処理エンジンという位置づけだ。1年前のイベントにて構想が発表され、開発が進められてきた。当初は汎用(はんよう)の分散型データ処理エンジンの機能を開発の主眼としていた。
しかしそれではGroongaユーザーにとってハードルが高くなり気軽に使えなくなり、開発者には負担が大きくなりそうだという懸念が徐々に明らかになってきた。そこで汎用(はんよう)的な分散型データ処理エンジンの開発よりも、当初傍流という位置づけだったGroongaとの互換性に重点を置くことにしたと開発者は優先順位を変更すると報告した。
方針変更はありつつも、最終的な成果物が「便利に分散処理ができる(汎用(はんよう)の分散型データ処理エンジンにもなる)Groonga」となるのは変わらない。あくまでも開発の優先順位とアピールの仕方が変わるとのこと。オープンソースかつ限られた人的リソースで開発しているため、需要に適した形で開発するということだ。開発者がこうした話を率直に打ち明けるところもコミュニティとともに歩んでいる製品らしい。いずれにしても、Droongaはまだ開発途上ではあるもののGroongaの性能の限界を超えるための有用なプロダクトとなりそうだ。今後の開発にコミュニティは期待している。
Groongaそのものは機能や性能が安定してきており、導入が進んできている。導入事例紹介では大手ブログサービスの提供企業から、Groongaをブログのユーザー管理画面の記事検索で用いていることを報告した。ほかにも特許検索のためのシステムで活用している事例も。大手ポータルサイトではパーソナライズ機能や社内システムでの導入も報告され、Groongaの導入は着実に広まっていることがうかがえた。