ついにベールを脱いだ! 未来検索ブラジルの新検索エンジン『groonga』

全文検索エンジンSennaと言えば、未来検索ブラジルの生み出した傑作フリーソフトウェアとしてつとに有名であるが、いよいよその後継プロジェクトであるgroonga(ぐるんが)が、2月20日にテストリリースされた。新しい検索エンジンgroongaはいったいどのようなソフトウェアなのだろうか?正式リリースより一足早く、その特徴をレポートしてみた。

groongaは組み込み型の全文検索エンジンライブラリです。DBMSやスクリプト言語処理系等に組み込むことによって、その全文検索機能を強化することができます。また、リレーショナルモデルに基づくデータストア機能を内包しており、groonga単体でも高速なデータストアサーバとして使用することができます。以下のような特徴を持っています。

■全文検索方式
転置索引型の全文検索エンジンです。転置索引は圧縮されてファイルに格納され、検索時のディスク読み出し量を小さく、かつ局所的に抑えるように設計されています。用途に応じて以下の索引タイプを選択できます。

・転置文書索引
語が出現する文書番号のリストを索引に格納します。索引サイズが小さく、索引の更新が非常に高速です。ただし、フレーズ検索時にフォルスドロップが発生する可能性があります。タグ検索など、フレーズ検索が不要な用途に特に適しています。

・完全転置索引
語が出現する文書番号、および文書内での出現位置の完全なリストを格納します。高精度な検索が実現できます。

・段落情報つき転置索引
語が出現する文書とその文書内での段落番号も索引に格納します。段落単位での高精度な検索が実現できます。

・重み情報つき転置索引
語が出現する文書とその文書内での重要度(フォントサイズなど)の情報も索引に格納します。XML/HTMLなどのタグつき文書を対象とする高精度な検索が実現できます。

・トークナイズ方式
トークナイズ(検索対象の文書を語に分解する)処理の方式は、用途に応じて選択することができます。ビルトインのトークナイザとしては、形態素解析(mecab),n-gram(unigram,bigram,trigram),空白区切りが用意されています。またユーザが作成した共有ライブラリ形式のトークナイザモジュールを実行時に組み込んで使うことができます。

■組み込み型
DBMSやスクリプト言語処理系等への組み込みやすさを重視しています。groongaはそれ自身もデータストア機能を備えていますが、必要な部品のみを選択して利用することができます。したがって、あらかじめデータストア機能を備えているDBMSに組み込む場合は転置索引機能のみを利用し、言語処理系に組み込む場合には必要に応じてデータストア機能も含めて利用する、といった柔軟な構成を選択することができます。

転置索引を含めたデータストアのオブジェクトは、複数のスレッドおよび複数のプロセスで共有することができます。また、検索処理は他の処理との排他制御を挟むことなく実行できます。したがって様々なスレッドモデル・プロセスモデルのシステムに、その同時実行性能を妨げることなく組み込むことができます。

■即時更新
転置索引を含めたデータストアオブジェクトは、検索処理と同時に更新(追加/削除)処理を実行することができます。更新した内容は、即座に検索結果に反映されます。頻繁に内容が更新される文書に対して、常に最新の検索結果を返したい用途に適しています。

■高速大容量
groongaは検索処理と更新処理のどちらも高速に実行できるように、また、大量の検索要求が集中するサーバ用途で性能を発揮できるように設計されています。具体的には、一つのオブジェクトに対して、(それが更新処理と同時であっても)複数のスレッドまたはプロセスが同時に参照可能としています。ただし、一つのオブジェクトに対する更新処理は同時に一つまでしか実行できません。

また、二次記憶への読み書きをバッファリングすることで、実メモリサイズを超える大容量の文書でも急激に性能を低下させずに処理可能となっています。

データストア機能
groongaはリレーショナルモデルに基づくデータストア機能をもっています。データストアは、レコードの集まりであるテーブル、テーブルの集まりであるデータベースから構成されます。テーブルには任意数のカラムを定義することができます。全文検索に用いる転置索引もテーブルとカラムの組み合わせによって実現されます。適宜必要なカラムを追加することによって、本文以外の書誌情報による絞り込みや分類・ソートなどの機能を自由に表現することができます。

テーブルは、主キー管理方式によって以下の3種類から選択できます。

ハッシュテーブル
ハッシュテーブルで主キーを管理します。キーと完全一致するレコードを非常に高速に検索することができます。

パトリシアトライ
ハッシュテーブルに比べて完全一致検索の速度がやや遅いですが、前方一致検索・共通接頭辞探索などの検索が行えます。またカーソルを用いてキーの昇降順にレコードを取り出すことができます。

主キーなし
主キーの存在しないテーブルを管理します。レコードはIDによって識別します。いずれの種類のテーブルも、永続型と一時型の2種類を選択できます。永続型のテーブルは、ファイルに保存され、複数のプロセスで共有することができます。一時型のテーブルはメモリ上のみに存在し、プロセスの終了と共に破棄されます。

動作環境
Linux(x86-64)を主要な対象として開発しています。Windows-XP以降, Mac OS 10.*, FreeBSD, Solarisも将来的にサポートする予定です。

ライセンス
groongaはフリーソフトウェアです。あなたは、 Free Software Foundationが公表したGNU Lesser General Public License 2.1が定める条項に従って本プログラムを再頒布または変更することができます。groongaは有用とは思いますが、頒布にあたっては、市場性及び特定目的適合性についての暗黙の保証を含めて、いかなる保証も行ないません。詳細については GNU Lesser General Public License 2.1をお読みください。

Sennaとの関係
groongaはSennaの後継プロジェクトです。Sennaよりも柔軟性に優れたソフトウェアにするために、APIを一新し、プロジェクト名も改めました。groongaはデータストア機能を備えるなど、Sennaとは機能的に大きく異なるソフトウェアのように見えますが、全文検索エンジンとしてのアーキテクチャはSennaの設計をそのまま踏襲しています。高い検索性能と更新性能などの特徴はそのまま受け継いでいます。

groongaはSennaとの互換性はありませんが、groongaのAPIを組み合わせることによって、Sennaと同等の機能は全て実現することができます。以上、駆け足でgroongaの特徴について紹介した。正式リリースの日が本当に楽しみです(このニュースの配信元はこちら)。
 
 
■関連リンクはこちら
2月20日に行われたkey-value勉強会での発表資料

  1. HOME
  2. ガジェ通
  3. ついにベールを脱いだ! 未来検索ブラジルの新検索エンジン『groonga』

森大二郎

プログラマ。有限会社未来検索ブラジル所属。オープンソースソフトウエアの開発に従事。参加作品「全文検索エンジンSenna  http://qwik.jp/senna/」「全文検索エンジンgroonga  http://groonga.org/」

ウェブサイト: http://groonga.org/

  • ガジェット通信編集部への情報提供はこちら
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。