日記
影舞のレポートをEstraierで全文検索する (17:51)Edit

影舞のデータ保存形式がKagemai::XMLFileStoreの場合用。Kagemai::XMLFileStoreでデータを保存する場合は、データディレクトリ以下にプロジェクト名のディレクトリが掘られ、その中のspoolディレクトリに[レポート番号].xmlなデータファイルが保存される。

データディレクトリが/home/kagemai/projectだとすると、project1のデータは/home/kagemai/project/project1/spoolになり、データファイルは/home/kagemai/project/project1/spool/1.xmlなんて感じになる。

単独のプロジェクトデータディレクトリ内を検索したい場合は、/home/kagemai/project/project1/spoolで*.xmlに対して転置インデックスを作ればいいだろう。

find /home/kagemai/project/project1/spool/*.xml|estindex register -list - -hsuf xml casket

とか。でも、プロジェクト単体の検索機能は影舞が持っているんで、ここではプロジェクトをまたがった検索用にEstraierを使う例。その場合は、

find /home/kagemai/project/ | grep -E "[0-9]+.xml$" | estindex register -list - -hsuf xml casket

なんて感じで複数プロジェクトをまたがったデータファイルをインデックス対象として指定する。影舞のデータファイルには設定ファイル等のxmlファイルも存在するんで、すべてのxmlファイルをインデックス化したらまずい。「[数値].xml」だけを抽出すれば余計な設定ファイルは対象に入らない。ちなみに「.xml~」という拡張子のバックアップデータファイルを除外しておく。

そうすると、インデックスに登録されたデータファイルのパスは、

/home/kagemai/project/project1/spool/1.xml

みたいな感じになるんで、これを影舞のレポートURLである、

http://example.com/kagemai/guest.cgi?project=[プロジェクト名]&action=view_report&id=[レポート番号]

に置換すればいい。estsearch.confのreplaceを使って、

replace: .xml
replace: /spool/ &action=view_report&id=
replace: /home/kagemai/project/ http://example.com/kagemai/guest.cgi?project=

とかすれば、それなりに動くはず。

ただ、xmlファイルをhtmlとしてEstraierにインデックス化させているんで、タイトルとかの情報がきちんとEstraier側に伝わらない。その辺もちゃんとしたければ、フィルタを書いて<element id="title"></element>を<title></title>とかに置換したりすると、きちんとタイトルも認識されるかな?(まだ試していない)

Published At2004-09-13 00:00Updated At2004-09-13 00:00