« マクドうどん生活 | メイン | お好み焼きは断られた »

2005年05月29日

Hyper Estraier をお試し中

N-Gram 方式を採用している Hyper Estraier を試しています。僕は、漏れが無い検索方法が大好きなのです。それは、スコアでソートよりも日付でソートの方が好きだからなのかもしれません。なんでもかんでも、日付でソートと言うわけでもないですが。

Hyper Estraier を試している理由としては、単に Rast が入らなかったというのもあります。入るだろうけど、なんどもエラーを見ながら ./configure の引数をなおすのがだるくなったというのが本音。

とはいっても、僕の中では、もともと Hyper Estraier が優先度トップでしたが。

早速、インデキシングを行い、検索してみました。30万件くらいだったらかなり高速に検索できました。なので、調子乗って 120万件 ほどインデキシングを行っています。が、めちゃくちゃ時間が掛かりそうな予感。

Hyper Estraier が良かったのは、文書ドラフト(中間ファイル)が使えるということです。これがかなり便利。最終的には API を使ってインデキシングにするかもしれないけど、とりあえず便利。

インデックスのサイズの説明について、以下のような記述がありました。

インデックスの最大サイズはおおよそ50GBです。また、対象文書がプレーンテキストの場合、インデックスのサイズは対象文書の容量の半分程度になります。HTMLであれば4分の1程度です。したがって、理論的には、一つのインデックスに登録できる文書の総量は、プレーンテキストなら100GB程度、HTMLなら200GB程度ということになります。

文書ドラフトで試してみたところ、元ファイルの3倍くらいになった。なんでだろう。仕様かな。それとも、僕の設定がおかしいとか。後者の可能性が大。

estseek.cgi をフロントから HTTP でアクセスするような使い方で実装すると思う。

コマンドラインインターフェイスでもWebインターフェイスでも、検索要求を処理する度にデータベースを開いたり閉じたりするのは非効率です(estcmdやestseek.cgiではそうしていますが)。データベースに接続する際にはそれなりのオーバーヘッドがかかるので、同時接続数が増えると負荷が高まり、ひいては検索速度の低下を招きます。したがって、なるべくなら、常駐型のプロセスを実装して、データベースのコネクションを使いまわすようにしてください。

とのことなので、自分で API を使って書く必要があるかも。C は得意じゃないんだけどなー。サンプルを見ながらがんばろう。そういえば estseek.conf はデフォルト設定にして setseek.cgi の引数にて、設定内容を変更できると便利だと思った。インデックスファイルの指定とか。

Hyper Estraier は、早い段階からドキュメントがしっかりしているのでお勧めです。

うちのサーバ(219.117.219.154)は、アクセスを拒否されているみたいだけどorz RSS の取得関係かな。ごめんなさい。

【関連情報】
・Hyper Estraier: 共同体的全文検索システム
 http://hyperestraier.sourceforge.net/
・開発メモ
 http://qdbm.sourceforge.net/mikio/rbbs.cgi
・Rast: 全文検索システム
 http://www.netlab.jp/rast/

2005年05月29日 18:59 | Technology

トラックバック

コメント

インデックスのサイズが大きい件ですが、QDBMのビルド時に ./configure --enable-zlib をしていないのが原因ではないでしょうか。
また、インデクシングを高速化するには、estcmd gatherの-csオプションで大きめの値(実メモリの半分くらい)を設定するといいと思います。
アクセス拒否の件ですが、自作のブログツールの性能テストをやっていた際に頻繁にアクセスが来ていたので止めさせてもらって、そのままになっていました。先ほど解除しました。

投稿者 mikio : 2005年05月30日 02:59

>> mikio さん
念のため ./configure --enable-zlib として再度インストールして試してみましたが、同様でした。合計 100MB の文書ドラフトをインデキシングすると 200MB ほどのインデックスディレクトリになります。正しくインストールされているかどうかを確かめる術はありますでしょうか?
差支えが無ければ hyperestraier.sourceforge.net などのアクセス制限もはずしていただければ幸いです。

気づいたことなど、細かいことは後ほど別エントリーを作成して書こうと思います。

投稿者 ceekz : 2005年05月30日 05:08

外しました。失礼しました。 > hyperestraier.sourceforge.net のアクセス制限

--enable-zlib してもサイズが小さくならないのは、文書の特性かもしれません。大きい文書が少数あるよりも、小さい文書が多数ある方がサイズが大きくなります。また、英語の文書よりも日本語の文書の方が大きくなります。estcmd optimize をするとだいぶマシになると思います。

私がおおよそ50%と算出したのは、RFCのテキスト全文(ftp://ftp.rfc-editor.org/in-notes/tar/RFC-all.tar.gz)を対象とした場合です。du -h rfc で192MBです。これのインデックスを作って du -h casket で132MBです。さらにoptimizeすると104MBです。だいたいこれと同じくらいのサイズになれば、インストールは正常だと確認できます。

これは理想的なケースですので、ドキュメントに書く数値はもっと高めにした方がいいかもしれませんね。

投稿者 mikio : 2005年05月30日 14:25

>> mikio さん
たぶん文書の特性でしょうね。仕方ないです。
RFC で行った場合は、仰るとおりのような結果を得ることが出来ました。圧縮は有効になっているようですね。

投稿者 ceekz : 2005年05月30日 23:30