estseek.cgiでは一つのインデックスだけしか扱えないので、大量の文書やWebサイトとファイルサーバにある文章を同時に扱うことができない。そこで、P2Pを使って問題を解決したい。
ノードの構成は下の状態
+- ノードマスタ ---------------------+
| mainノード -+- project_a ノード |
| +- project_b ノード |
| +- イントラ ノード |
+------------------------------------+
ノードマスタは一つだけ用意。mainノードにはインデックスは持たずに、project_aノード、project_bノード、イントラノードへのリンクを張るだけ。project_aノードとproject_bノードはそれぞれのプロジェクトで作成した文章へのインデックスを持ち、イントラノードはイントラをクロールしたインデックスを持つ。project_cや新たなイントラを検索の対象に含めたい場合には、個別にノードを用意(インデックスを作成)して、mainノードからのリンクを追加する。
クライアントはmainノードだけを検索の対象にして、mainノードがそれぞれのノードに対してリクエストを投げて、帰ってきた応答をマージしてクライアントへ返す方法をとる。
これが適切な設計なのかはわからないが、試験的なものとして試してみる。
操作で使うディレクトリの状態は下の通り。
+ master マスタノードのサーバルートディレクトリ
| +- _node ノードディレクトリ
| +- main mainノード
| +- project_a project_aノードのインデックス
| +- project_b project_bノードのインデックス
| +- intra イントラノードのインデックス
|
+- crawl クローラーのディレクトリ
ノードマスタとノードを作成
[参考]P2Pガイドのチュートリアル 「起動と終了」及び「管理用インターフェイス」
$ estmaster init master
$ estmaster start -bg master
webブラウザで http://localhost:1978/master_ui へアクセス。認証はadmin/admin。
Manage Nodesからmain、project_a、project_b、intraのそれぞれのノードを追加
mainノードからのリンクを設定
[参考]P2Pガイドのチュートリアル 「文書の検索」
メインノードからそれぞれのノードへのリンクを設定する。信頼度は全て1000。
$ estcall setlink -auth admin admin http://localhost:1978/node/main \
http://localhost:1978/node/project_a プロジェクトA 1000
$ estcall setlink -auth admin admin http://localhost:1978/node/main \
http://localhost:1978/node/project_b プロジェクトB 1000
$ estcall setlink -auth admin admin http://localhost:1978/node/main \
http://localhost:1978/node/intra 社内イントラ 1000
estcmdでproject_aとproject_bのインデックスを作成
[参考]P2Pガイドのチュートリアル 「初期導入の効率化」
ノードマスタを起動している最中はインデックスがロックされているため、estcmd gatherがロック待ちで止まりますので、ノードマスタを停止してから行います。
$ estmaster stop master
$ estcmd gather -cl -fx ".doc,.xls,.ppt" "H@estfxmsotohtml" -ic UTF-8 \
-sd -cm -pc UTF-8 master/_node/project_a /home/Projects/project_a
$ estcmd gather -cl -fx ".doc,.xls,.ppt" "H@estfxmsotohtml" -ic UTF-8 \
-sd -cm -pc UTF-8 master/_node/project_b /home/Projects/project_b
$ estmaster start -bg master
クロールしてイントラノードのインデックスを作成
$ estwaver init -xs crawl
$ im crawl/_conf
seed: 1.0|http://intra.example.co.jp/
として他のseedを削除。seedは種文書(ここからクロールを開始する)
allowrx: ^http://http://intra.example.co.jp/
クロールをイントラサーバだけに限定します。
language: 1
日本語の文書なら1にします。
nodeserv: 1|http://admin:admin@localhost:1978/node/intra
事前に作成したノードへインデックスを保存します。
$estwaver crawl -revcont crawl
検索をしてみる
http://localhost:1978/node/main/search_ui へアクセスすると、検索フォームが表示されます。右側にはmainノードがリンクしているノードが表示されているはずです。depthが「0」のまま検索すると、リンク先を検索しないので、ヒットしないはずです。「1」以上にすると、リンクしているノードも含めて検索結果が表示されます。右側にあるノードのチェックを外すと検索の対象から除かれます。