あまつぶ

11.9 【XでNamazu検索(後編)】

 前回の続き。本当は先週書くつもりだったのだけど、テンプレートの部分が整理できなくて書けなかった。まだ整理(というより理解か)できていないのだけど、その部分は省略して普通に使うところまでを扱おうと思う。

 まず、インデックスの作成から。Namazuの検索は、Sherlockなんかと同じように、先にインデックスと呼ばれるものを作成してから行う。これによって、高速に検索ができるというわけだ。
 インデックスは、mknmzというコマンドで行う。書式はこんな感じ。

% mknmz -O (インデックス作成先) (インデックスを作成するファイル/フォルダ)

 作成先は特に指定しなくてもいいみたいだけど、うちの場合、作成したインデックスをサーバにアップロードしてインターネットで検索できるようにと考えたので、アップロードするためのフォルダに作成するように指定した。また、インデックスを作成するファイルやフォルダについては、スペースで区切って複数同時に指定することができる。これもうちの場合だけど、コンテンツを置いているサーバが2つあるので、それらを同時に指定した。
 ファイルの数にもよるが、インデックスの作成には結構時間がかかる。2回め以降の更新は、更新されたファイル、あるいは新たに作成されたファイルだけが対象となるので、効率がよくなる。完全に作り直したいときは、インデックスを消してから行えばいい。

 インデックスが作成できたら、次は検索だ。検索に使用するコマンドはnamazuだ。書式はこんな感じ。

% namazu (検索キーワード) (使用するインデックス)

 使用するインデックスには、mknmzで作成したインデックスのある場所を指定する。これで、検索結果がずらずらと表示される。
 これはこれで便利なのだけど、インターネットから使えるようにするにはどうしたらいいだろう。それには、cgi版のnamazuとインデックスをサーバに転送し、さらに、インターネット上で検索結果が正しく確認できるように、ローカルのパスとインターネット上のURLを変換してやる必要がある。

 ローカルのパスからインターネット上のURLに変換するには、.namazurcというファイルを作成して設定する。このファイルは、/usr/local/etc/namazu/にある、namazurc-sampleをベースに作成するといい。設定すべき項目は、3つ。Index、Replace、それからLangだ。
 Indexでは、検索に使用するインデックスを指定する。相対パスが有効なようなので、cgiとインデックスの置き場所の相対パスを指定すればいい。
 Replaceは、ローカルのパスからURLへ変換するための指定。ローカルのパス(フルパス)と、インターネット上のURLをhttp://から指定する。
 最後に、Langで使用する言語を指定する。通常は、ja(日本語)にしておけばいいと思う。

 あとは、/usr/local/libexec/にあるnamazu.cgiをcgiを使用するサーバに転送、.namazurcをnamazu.cgiと同じフォルダに転送し、インデックスについても同様に転送すれば準備完了である。namazu.cgiについては実行権限をつけておくことをお忘れなく。
 しかし、この方法は、通常、失敗する。namazu.cgiは、X(Darwin)上でビルドされたものなので、サーバがDarwinでないと動かない。また、C言語でコンパイルされたcgiの動作を許可しているサーバは少ないと思われる。ということで、この方法は、自前でサーバをたてているとかそういうケース以外では使えないと思う。

 では、どうしたらいいか。namazu.cgiの代わりに、perlで書かれた検索用のcgiがあれば解決する。ものは試しと、Googleで「namazu」「perl」を検索してみたところ、namazu 検索プログラム perl版(pnamazu)というページを発見。早速ダウンロードして試してみると、無事検索ができた。めでたい。
 出来上がったページは、pNamazu: / a Full-Text Search Engine。まだテンプレートをなにもいじっていないので構築したままになってしまっているが、これから少しずついじっていくつもり。

 一点だけ補足。pnamazuのバイナリは、bzip2で圧縮されている。コマンドラインで展開するには、下のようにするとよい。

% bzip2 -dc pnamazu-2002.09.21.tar.bz2 | tar xvf -

 bzip2での圧縮結果をパイプでtarに渡すのだが、tarのオプション「-」がポイントで、これで標準入力を指定できるのだそうだ。ま、普通に2回にわけて展開しても同じことだが、中間ファイルを作らずにすむので便利だと思う。

 今回の話はここで終わり。そうだ。もう一つ。シェルスクリプトをダブルクリックで実行する方法について、どこかで読んだような気がするのだけどどこだったか覚えてない。どうやるのかも覚えていなかったが、試しにFinderの「このアプリケーションで開く」でTerminalを指定すれば実行できるということを発見。問題は、ユーザディレクトリがカレントディレクトリになった状態で実行されるのでスクリプトによってはうまくうごかないことくらいかな。ま、これは、最初にcdで移動するようにしておけばいい。これは結構便利かも。

October 26, 2002 ↑ 2002 index → December 8, 2002