Webサーバ上の全文検索システム Hyper Estraier に挑戦してみました。
PDFやWordファイルも検索できるし、多言語に対応するなど高機能で、かつ速い。インストールは簡単。他のWebを検索できるWebクローラ機能もついている。といういいこと尽くめ。ただ、ファイル名やパスに日本語が含まれているとうまくいかない。検索はできるのだけど、ブラウザ上からクリックで表示できないのです。
インデックス作成コマンド
estcmd.exe gather -il ja -fx .pdf,.rtf,.doc,.xls,.ppt T@estxfilt -ic CP932 -pc CP932 -sd -cm indexfile C:\htdocs
検索用CGIの設定ファイル estseek.confの一部
indexname: indexfile
replace: ^file:///C|/htdocs/{{!}}http://localhost/
replace: ^http://localhost/\|{{!}}
replace: /index\.html?${{!}}/
showlreal: false #<= Web表示用
#showlreal: true #<= ローカル表示用
原因は、Hyper Estraierのポリシーにあるらしく、ローカルファイルの場合には日本語名を含むパスを、UNCそのまま表示できるのだけど、Web上の場合は、URIに強制的にエンコードしてしまう。
インターネット上で日本語バス名を使うこと自体、おかしなことなのだけど、イントラネット内では普通に行われている。LAN内でファイルサーバに特化していればいいのだろうなあ。
うむ。なかなか思うようにいかない。
(2009.09.11 追記)
解決しました
何のことはない。ドキュメントをよく読めば、replaceマッチは正規表現が必要とのこと。
検索用CGIの設定ファイル estseek.confの一部
replace: ^C:\\xampp\\htdocs{{!}}http://localhost
showlreal: true
よくよく考えれば、単純なことでした。ちなみに正規表現とは
^ 先頭マッチ $末尾マッチ
「\」や「.」にはエスケープ文字「\」を前置する
\.htm${{!}}.html」とすると、末尾の「.htm」を「.html」に変換
これもみんな、ちゃんとドキュメントに書いてありました。
PDFやOffice文書も検索できるし、これはいいです。2007形式はだめみたいだけど、これは使えそうです。
(2009.09.12追記)
Hyper EstraierをWindows+IIS環境で動かすには、もう一つ障壁がありました。
検索用CGI(estseek.cgi)がバイナリなため、Perlから実行しようとするのです。estseek.cgi自体は実行形式ファイルなので、estseek.cgi.exeにリネームして、設定ファイルestseek.confもestseek.cgi.confにすることまでは考えつきました。IISのWebサービス拡張で、estseek.cgi.exeに実行許可を与え、かつ、保存したディレクトリで、スクリプトと実行形式ファイルに実行権限を与えます。でもだめでした。
一晩悩みましたが、下記のような書き込みを発見。
http://hidensan.blog.shinobi.jp/Entry/116/
estseek.cgi.conf をwwwrootに置かなければならないようです。
またestseek.cgi.exeも、cgi-binディレクトリではなく、wwwroot下におくことで、ようやく実行可能になりました。exeファイルがcgi-binで動かないのはよくわかりませんが、ディレクトリの参照権限を細かく設定することで、なんとか切り抜けました。
それにしてもインデックスを作成する速度は素晴らしく速い。PDFファイル40個ほどでも、わずか数秒です。これはいいですね。使えそうです。