Hyper Estraier(全文検索エンジン)で、PDFやWordなどのファイルがうまくクロールされない場合の対処

タイトルの件、うまくいかなかったことがあったので、色々と調べて対処してみた。
ちなみに対象のHyper Estraierのバージョンは1.4.13。


まず、Hyper Estraierでは、クローリング時にフィルタ用のプログラム(PDFをHTMLに変換して解釈、など)をはさむことで、検索対象としてPDF(.odf)やワード(.doc)、エクセル(.xls)、パワーポイント(.ppt)などのファイルを扱うことが可能です。

Round 1

"estwaver crawl"コマンドで、ドキュメントが配置してあるところをクロールさせた場合に、通常のHTMLファイルは何の問題もなく処理できたんだけど、PDFやWordのファイルに対しては、fetchはするんだけど、ignoreされちゃう問題が起こった。
INFOログ的には以下のような感じ。

2009-06-26T06:52:18Z    INFO    [12]: fetching: 4: http://localhost:3000/cache/share_file/user/1/xxxxxxx%E5%A5%91%E7%B4%84%E7%B4%84%E6%AC%BE(%E7%AC%AC3%E7%89%88%EF%BC%89.doc
2009-06-26T06:52:18Z    INFO    [13]: fetching: 4: http://localhost:3000/cache/share_file/user/1/SKIPaaS%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%82%AC%E3%82%A4%E3%83%89.pdf
2009-06-26T06:52:18Z    INFO    [12]: ignored: 200: http://localhost:3000/cache/share_file/user/1/xxxxxxx%E5%A5%91%E7%B4%84%E7%B4%84%E6%AC%BE(%E7%AC%AC3%E7%89%88%EF%BC%89.doc
2009-06-26T06:52:18Z    INFO    [13]: ignored: 200: http://localhost:3000/cache/share_file/user/1/SKIPaaS%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%82%AC%E3%82%A4%E3%83%89.pdf

この点については、waver(クローラ)の_confファイルの設定の記述ミスだった。

typerule: ^application/pdf$H@/usr/local/share/hyperestraier/filter/estfxpdftohtml
typerule: ^(application/msword|application/vnd.ms-(excel|powerpoint))$H@/usr/local/share/hyperestraier/filter/estfxmsotohtml

上記は、フィルタの設定だが、上記の記述はNGで、正しくは以下のように書く。

typerule: ^application/pdf${{!}}H@/usr/local/share/hyperestraier/filter/estfxpdftohtml
typerule: ^(application/msword|application/vnd.ms-(excel|powerpoint))${{!}}H@/usr/local/share/hyperestraier/filter/estfxmsotohtml

mimetypeの後ろに、"{{!}}"がなかった、というオチ。

Round 2

PDFファイルはfetchされてregisterされるけど、ワードのファイルは、fetchされるけど"not to be indexed"となっちゃう問題が起こった。
INFO(DEBUG)ログ的には、以下のような感じ。

2009-06-26T07:04:16Z    INFO    [12]: fetching: 4: http://localhost:3000/cache/share_file/user/1/xxxxxxx%E5%A5%91%E7%B4%84%E7%B4%84%E6%AC%BE(%E7%AC%AC3%E7%89%88%EF%BC%89.doc
2009-06-26T07:04:16Z    INFO    [13]: fetching: 4: http://localhost:3000/cache/share_file/user/1/SKIPaaS%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%82%AC%E3%82%A4%E3%83%89.pdf
2009-06-26T07:04:16Z    DEBUG   [12]: not to be indexed: http://localhost:3000/cache/share_file/user/1/xxxxxxx%E5%A5%91%E7%B4%84%E7%B4%84%E6%AC%BE(%E7%AC%AC3%E7%89%88%EF%BC%89.doc
2009-06-26T07:04:16Z    DEBUG   [13]: registered: http://localhost:3000/cache/share_file/user/1/SKIPaaS%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%82%AC%E3%82%A4%E3%83%89.pdf

この点については、ワードファイルのフィルタソフトが正しく動いていなかったのが原因。

waver(クローラ)の_confファイルで、MS Office関連のフィルタの設定をしているのは、上でも書いたとおりですが、フィルタのコマンドである"estfxmsotohtml"は単独でも実行できるのですが、実際にクローリングさせてい"not to be indexed"となったドキュメントをinputとして渡すと、HTMLに展開されるはずのアウトプットが空ファイルになってしまった。


おかしいと思い、"estfxmsotohtml"の中身で実行されているものをさらに抽出して実行すると、以下のような結果になった。

$ wvWare --charset=UTF-8 --nographics "/data/app/skip/share_files/user/1/xxxxxxx契約約款(第3版).doc"
wvWare: error while loading shared libraries: libwv-1.2.so.3: cannot open shared object file: No such file or directory

おっと、、、ライブラリが参照できていないじゃないすか・・・握りつぶし状態。
インストールされているはずなのに・・・あ!ということで、、、

  1. ライブラリのある場所を探す(findとかlocateとか)
  2. "/etc/ld.so.conf"に記載+"ldconfig"コマンドを実行して、ライブラリにパスを通す(LD_LIBRARY_PATHを設定しても良い)


これで、再度実行することで、めでたくクロールされインデックスに登録された。