y-matsui::weblog

電子楽器、音楽、コンピュータ、プログラミング、雑感。面倒くさいオヤジの独り言

DataBindで全文検索

IEのみで使える機能として、DataBINDというものがある。
これは、CSVなどから配列をフィールドとして読み込んで、スクリプト(HTML)内でタグを使って読み出せるという機能。ASPPHPなんかでフィールドのタグを使うのと変わらない。
ASP.NETでもデータバインドを使ってグリッド表現や、ブラウザ上でのソートなどを実現しているようなので、Microsoftがとっても大事にしている技術であることは間違いない。
(その他のブラウザでは実装されないので、DataBINDを使ったWebアプリは、必然的にIE専用になる)
さて、そのDataBind機能であるが、読み込んだフィールドデータは、すべてブラウザ上のメモリに展開される。一度読み込んでしまえば、クエリだけ変えて、かなり高速に検索できるのである。
「これを全文検索(単語のあいまい検索)に使わない手はない!」・・ということで、実験してみた。
1300ページ分のPDFをページ分割、テキスト情報を抜き出してエクセルにまとめる
CSVとして書き出し、ブラウザ上で全文検索を実行してみる。

■結果
初回読み込み(15秒)
3MBのCSVからの全文検索→瞬時〜1秒

1300ページのPDFデータを使って、Acrobat全文検索を実行すると、50秒。
違う条件で検索すれば同じように時間が掛かる。
Acrobat全文検索機能の場合は、ファイルリードをしながら、バイナリ中の文字列を比較して、ヒットした周辺のセンテンスも書き出すのだから、遅いのは当たり前。

やはりオンメモリの威力は凄い
Acrobatの仕様上は、100万ページまでOKとのことだが、これではいつまでも検索結果が戻ってこないに違いない。

メモリ使用量比較
Acrobatで1300ページのPDF(7.5MB)→AcroRd32.exeで64MB
・InternetExplorerで1300ページ分の全文テキスト(3MB)をDataBIND→49MB

※Webアプリの方は、Tree用XMLのDOM展開もメモリ利用に含まれる。