Hyper Estraier : gather っぽいものを作ってみた。

思うところがあって、gather 機能的なものを作ってみたので、その記録。

 

文書ドラフト(.est)ファイルを1000万件(ファイルサイズは1kB程度)ほど、作って、

estcmd で読み込んでデータベースを作ろうとしたんだけれども、

1000万件分の文書ドラフトファイルを生成する処理だけで、数日かかりそうなことが分かって、別の方法がないかなと。

 

元ネタファイル→文書ドラフト(.est)→Hyper EstraierのDBファイル。

としたかったが、文書ドラフト(.est)を作るのをやめて、

元ネタファイル→Hyper EstraierのDBファイルと出来ないかな? と。

 

WindowsバイナリのHyper Estraier 1.4.10をダウンロードして、

そこに含まれているDLLを拝借して、オレオレgather的なものを作ってみた。

 

gatherの作り方は、プログラミングガイドのサンプルコードを拝借。

http://fallabs.com/hyperestraier/pguide-ja.html

 

速度は文書ドラフトを作らないだけあって速い。

実際に動かしてみると、元ネタのファイル1GBを半分くらい

(ドラフト文書相当数だと、だいたい220万件程度を)処理したところで

> fatal error : memory corrupt

とか出てきてアプリが落ちた。

 

メモリ使用量は、500MBくらいで、4GBのメモリの3GB以上空いている状態。

原因はメモリ不足ではなさそう。

 

原因追求する時間が惜しかったので、とりあえず入力ファイルを小さく分割して、

それぞれに対応する小さなデータベースファイルを出力するようにしたら無事最後まで処理完了。 

 

あとは、Hyper Estraier付属のestcmd.exeで

複数のデータベースをマージしてひとつの巨大なデータベースにするだけ。

 

途中でハマって処理方法を変えたので、自作アプリを作り直すはめになったけど、

当初の目的が何とか達成できましたとさ。 

 

Hyper Estraierはドキュメントが充実していて、ほんとうにありがたいです。