※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

全文検索システムについて

背景:ファイル共有サーバに保管されている資料が散在しており、どこに何があるのかわからない。
   過去の設定ファイルや、資料、管理番号などから資料を探し出したい。
   GoogleDeskTopや、デスクトップサーチで同様のことができるが、PCが重くなる、個人単位でしか使えない、
   インデックスのディスク容量が大きくなりすぎることから、メンバー全員で使えるシステムを検討する。
   
   個人利用であれば、GoogleDesktopや、ファイル名だけのFindYourFilesがおすすめ。

目的:一般的なドキュメント(Office文書、PDF、テキスト)などの全文検索
   メールについては、別途検討

前提:サーバ Centos5.5

はまったこと
 SMBで共有フォルダを共有しての検索
 estseek.confのリプレイス
 OFFICE2007以降の文書ファイルのインデックス登録

やるべきこと
 インストール
 インデックス化
 バックアップ
 ログ退避
 インデックスのクーロン

課題
 ZIPファイルや、EXEファイルなど、ファイル名のみのインデックス、検索結果の回答
 メーリングリストのアーカイブ、インデックス化

インストール
 インストールガイドを参照して、インストール
 Hyper Estraierは、以下のライブラリを利用しています。最新をインストール実施
  libiconv : 文字コード変換。バージョン1.9.1以降(glibcにも同梱)。
  zlib : 可逆データ圧縮。バージョン1.2.1以降。
  QDBM : 組み込み用データベース。バージョン1.8.75以降。

 Hyper Estraierの配布用アーカイブファイルを展開したら、
 生成されたディレクトリに入ってインストール作業を行います。
 (※/home/ユーザ名 にダウンロードしてきて、実行した。)
 configureスクリプトを実行して、ビルド環境を設定します。
 ./configure
 プログラムをビルドします。
 make
 プログラムの自己診断テストを行います。
 make check
 プログラムをインストールします。作業はrootユーザで行います。
 make install

HyperEstraierを入れた後に、外部フィルタのインストールを実行
※OFFICE文書、PDFに対応するため。
wvWareをインストール
xlhtmlをインストール

estfxmsotohtmlはMS-Office(Word/Excel/PowerPoint)のファイルをHTML形式に変換するフィルタです。
以下のように利用して、MS-Officeのファイルを対象にしたインデックスを作ることができます。
なお、estfxmsotohtmlを動作させるにはwvWare(wv-1.0.3)とxlhtml(ppthtmlも同梱)をインストールしておくことが必要です。

OFFICE2007以降のxlsx,pptx,docxは別途フィルタを準備
「ほったてCV実験室」の記事、「Hyper Estraier で OpenDocument & Office Open XML を検索対象にする」を参考
http://ru11en.wordpress.com/2008/03/17/hyper-estraier-%E3%81%A7-opendocument-office-open-xml-%E3%82%92%E6%A4%9C%E7%B4%A2%E5%AF%BE%E8%B1%A1%E3%81%AB%E3%81%99%E3%82%8B/
仕組みは、xlsxなどは、ZIPアーカイブされているだけなので、そこからテキストを引っ張り出して、検索対象にするとのこと。
シェルを公開していただいていたので、利用させていただきました。

シェルをダウンロード
/usr/local/share/hyperestraier/filter へ移動
実行権限を付与
あとは、他のフィルタと同様に使用する。
例)estcmd gather -il ja -cl -fx .docx,.xlsx,.pptx H@estfx_ooxml2xml.sh -fz -ic UTF-8 -pc UTF-8 -cm -sd /var/www/he/casket /mnt/vol1 >> /var/log/hyperestraier/vol1.log
もちろん、パスを通しておく必要あり。
PATH=$PATH:/usr/local/share/hyperestraier/filter

インデックスの作成
文字コードで苦労した。
自分の環境では、いろいろ試して、UTF-8で文字化けしないことが判明
ただし、リンク先のURLがURIに変換されてしまうため、URI変換に対応したestsee.cgiを拾ってきた。

http://qos.mine.nu/wordpress/2011/04/hyperestraier%E3%81%AEdoc_link%E3%82%92url%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89%E3%81%97%E3%81%A6%E8%A1%A8%E7%A4%BA.html
いただいたいパッチをあててestseek.cgi を入れ替えた。
patch -p < estseek.c.patch で入らなかったので、 patch < estseek.c.patch であてれた。

ここからが、ミソ
/var/www/cgi-bin/estseek.conf
---------------------------------------------
#インデックスの保管場所を指定
indexname:/ /var/www/he/casket
#リプレイス
replace: ^http://192.168.10x.xx/mnt/{{!}}file://fileserver/
replace: ^/mnt/{{!}}file://fileserver/
#パッチ宛てたやつ 新規追加記載
doclinkdecode: true
#ファイルパスを変換しないで表示
showreal: ture
--------------------------------------------

共有フォルダのSMBマウント

mkdir /mnt/vol1
mount -t cifs -o user=xxxxx,password=xxxxx //filesever/vol1 /mnt/vol1

SMBの自動マウント設定

ここまでで、丸2日かかった。。。orz

あと少し、
インデックスの自動更新(平日月曜から金曜日)
インデックス更新シェルを作成
更新時に、DBにロックをかけて行うので、DBをバックアップ、退避させる。
インデックス更新時のDBはバックアップを見るようにする。
※sub-estseek.confでインデックスの指定をバックアップしたSUBに切り変える。

./daily-casket.sh
#!bin/sh
#backup
rm -r -f /var/www/he/casket_sub3
mv -f /var/www/he/casket_sub2 /var/www/he/casket_sub3
cp -r /var/www/he/casket /var/www/he/casket_sub

#change casket
  cp /var/www/cgi-bin/sub-estseek.conf /var/www/cgi-bin/estseek.conf

#index make
PATH=$PATH:/usr/local/share/hyperestraier/filter

#Index
/usr/local/bin/estcmd gather -il ja -cl -fx .doc,.xls,.ppt H@estfxmsotohtml -fz -ic UTF-8 -pc UTF-8 -cm -sd /var/www/he/casket /mnt/vol1 >> /var/log/hyperestraier/vol1.log
/usr/local/bin/estcmd gather -il ja -cl -fx .pdf H@estfxpdftohtml -fz -ic UTF-8 -pc UTF-8 -cm -sd /var/www/he/casket /mnt/vol1 >> /var/log/hyperestraier/vol1.log
/usr/local/bin/estcmd gather -il ja -cm -sd -pc UTF-8 -lf 10 /var/www/he/casket /mnt/vol1 >> /var/log/hyperestraier/vol1.log
/usr/local/bin/estcmd gather -il ja -cl -fx .docx,.xlsx,.pptx H@estfx_ooxml2xml.sh -fz -ic UTF-8 -pc UTF-8 -cm -sd /var/www/he/casket /mnt/vol1 >> /var/log/hyperestraier/vol1.log

他にやること
ログローテーション作成 /var/log/hyperestraier/
DBのメンテナンス
削除文書の反映(毎週土曜日) estcmd purge -cl casket
インデックスの最適化(毎週日曜日) estcmd optimize casket

crontab に登録
crontab -e
00 21 * * 1-5   /var/www/cgi-bin/daily-casket.sh
00 21 * * 6     /var/www/cgi-bin/sat-casket.sh
00 21 * * 7     /var/www/cgi-bin/sun-casket.sh

#追記
「HyperEstraierを使ったファイル名での検索について」

ファイル名だけで、検索したい。
「jpg,tiff,exe,ttl,mac,etc」など拡張子を問わず、ファイル名だけで検索したいんだよ。。
悩んだ末。。

「-ftを付けると、処理対象の全てのファイルをプレーンテキストとして扱います。 」とあるので、
一度、インデックスを作成した後に、オプションの -ft を付けて再度登録します。
すでに登録されているxlsやtxtなどは-cm オプションでスキップされます。
先に実行してしまうと、ファイル名のみでインデックスができてしまうので、
インデックス作成後にする必要があります。
/usr/local/bin/estcmd gather -il ja -cl -ft -ic UTF-8 -pc UTF-8 -cm -sd /var/www/he/test /mnt/test
上記のコマンドを使い、検索モードをFileにすれば、ファイルパス検索で、ファイル名検索が実現できました。


ざっくりこんな感じ