Oliver (4) の日記

2005 年 06 月 01 日
午前 09:52

全文検索エンジン:Hyper Estraier

Hyper Estraierはパフォーマンス重視のDBMとして開発されているQDBMの作者による全文検索エンジン。同じ作者によるわかり書きを使った全文検索Estraierをn-gram方式に再実装したものを出発点とし、将来はP2Pによる分散検索も目標としている。ライセンスはLGPLで、特徴は:

  • n-gram方式。しかし、キーを減らしたり検索性能をアップするためにいろいろ工夫している様子
  • Cライブラリ+サンプルアプリのコマンドラインツール
  • 他の言語のバインディング(まだ)なし
  • CGIもセットですぐ使えるレベルの高い完成度。ドキュメントもちゃんとしている

手元のamd64環境でビルドするにはMakefileに-fPICの追加など、ちょっと手を加える必要があった。Perlバインディングが存在しないので、テストは属性値を含めるEstraierの「文書ドラフト」形式にデータをファイルシステム上に書きだし、付属のCで書かれたコマンドラインツールでindex登録および検索することによってベンチマークを取った。

Journals Indexing

10000 entries: 0m27sec (27MB)
+10000 entries: 0m28sec
=================================
20000 entries: 0m55sec (47MB)
+10000 entries: 0m35sec
=================================
30000 entries: 1m30sec (75MB)
+10000 entries: 0m36sec
=================================
40000 entries: 2m06sec (105MB)
+10000 entries: 0m41sec
=================================
50000 entries: 2m47sec (138MB)
+10000 entries: 0m43sec (174MB)
+10000 entries: 0m47sec (209MB)
+10000 entries: 0m50sec (245MB)
+10000 entries: 0m57sec (284MB)
+10000 entries: 1m02sec (323MB)
+10000 entries: 1m07sec (362MB)
+10000 entries: 1m19sec (403MB)
+10000 entries: 1m30sec (448MB)
+10000 entries: 1m28sec (492MB)
+10000 entries: 1m36sec (541MB)
+10000 entries: 1m42sec (590MB)
+02783 entries: 0m57sec (599MB)
==================================
162783 entries: 16m45sec (599MB) [累計]
162783 entries: 11m46sec (436MB) [まとめて登録]

Journals search "foo"
10000 entries: 0.020sec (9 hits)
20000 entries: 0.025sec (17 hits)
30000 entries; 0.030sec (26 hits)
40000 entries: 0.033sec (32 hits)
50000 entries: 0.035sec (37 hits)
60000 entries: 0.042sec (45 htis)
70000 entries: 0.051sec (55 htis)
80000 entries: 0.058sec (64 htis)
90000 entries: 0.065sec (72 htis)
100000 entries: 0.072sec (87 htis)
110000 entries: 0.080sec (96 htis)
120000 entries: 0.087sec (102 htis)
130000 entries: 0.089sec (110 htis)
140000 entries: 0.092sec (116 htis)
150000 entries: 0.100sec (125 htis)
160000 entries: 0.109sec (138 htis)
162783 entries: 0.109sec (139 hits)

速度低下はかなりリニアで、とても素直な挙動といえる。indexのサイズも元のデータが693MBなので、かなり優秀。成長させていったindexに対してestcmd optimizeを実行したところ、300MBまで縮んだ。

全体的に以前にいちど全文検索エンジンを作ったことのある作者の経験が活かされ、ドキュメントやツールなど、かなり質の高いものに仕上っている。他言語バインディングはないが、それは必要となれば比較的簡単に作れそうだし、速攻でいまのNamazu版を置き換えた感じのSlashcodeと統合されていない並行システムが容易に作れそうだ。

今後の検証課題はQDBMの排他処理とNFS経由で複数のホストがindexを使った場合の挙動。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー

処理中...