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はドキュメントが充実していて、ほんとうにありがたいです。