Namazu

はじめに

全文検索システム Namazuを用いたウェブサーバーの全文検索システムの使いかたです。
普通じゃない使いかたも書きましたので、At your own riskで試してみて下さい。

インデックスの作成(1)

ウェブサーバーのドキュメントルート(ここでは/webrootと仮定する)の下にnamazuディレクトリを作成。
namazuディレクトリの下にindexディレクトリを作成。

$ cd /webroot
$ mkdir -p namazu/index
$ chmod 701 namazu/index

インデックスの作成。

$ cd namazu/index
$ mknmz /webroot/

/webroot 以下の対象ファイルがインデックス化され、 NMZ.*というファイルがたくさんできる。

$ ls
NMZ.body NMZ.field.message-id NMZ.field.summary NMZ.foot.fr NMZ.log NMZ.result.short NMZ.tips.es
NMZ.body.es NMZ.field.message-id.i NMZ.field.summary.i NMZ.foot.ja NMZ.p NMZ.result.short.es NMZ.tips.fr
NMZ.body.fr NMZ.field.newsgroups NMZ.field.to NMZ.head NMZ.pi NMZ.result.short.fr NMZ.tips.ja
NMZ.body.ja NMZ.field.newsgroups.i NMZ.field.to.i NMZ.head.es NMZ.r NMZ.result.short.ja NMZ.version
NMZ.field.date NMZ.field.size NMZ.field.uri NMZ.head.fr NMZ.result.normal NMZ.slog NMZ.w
NMZ.field.date.i NMZ.field.size.i NMZ.field.uri.i NMZ.head.ja NMZ.result.normal.es NMZ.status NMZ.wi
NMZ.field.from NMZ.field.subject NMZ.foot NMZ.i NMZ.result.normal.fr NMZ.t
NMZ.field.from.i NMZ.field.subject.i NMZ.foot.es NMZ.ii NMZ.result.normal.ja NMZ.tips

cronの設定

Webminを起動し、システム -> 予定済み Cron 作業 へ移動。
新しいスケジュールのcronジョブを作成 をクリックし、ユーザー、コマンド(/usr/bin/mknmz -O /webroot/namazu/index/ /webroot/) を入力。
毎日0時10分に更新されるようにした。

CGIの設定(1)

/home/httpd/cgi-bin/namazu.cgiを/webroot/namazu/にコピー。
.namazurcをnamazu.cgiと同じディレクトリに作成

# インデックスファイルがあるディレクトリ
Index /webroot/namazu/index/
# HTMLのテンプレートがあるディレクトリ
Template /webroot/namazu/index/
# ウェブサーバーのドキュメントルートをドメイン名に置換する
Replace /webroot/ http://domainname/

http://domainname/namazu/namazu.cgiにアクセスすると、サイト内の全文検索ができる。

インデックスの作成(2)

ドキュメントルート以下のファイル全てを検索の対象としたくないので、 インデックスを作る対象のファイルや、除くディレクトリを設定する。

$ cp /etc/namazu/mknmzrc ~/.mknmzrc

~/.mknmzrcを変更

# HTMLファイルのみインデックス化
$ALLOW_FILE="*.html";
# インデックス化しないディレクトリ
$EXCLUDE_PATH = "/webroot/namazu|/webroot/secret";

インデックスを作りなおす

$ mknmz -O /webroot/namazu/index /webroot/

CGIの設定(2)

namazu.cgiの見た目を変えるには/webroot/namazu/index にあるNMZ.???.jaというファイルを変更すればよい。
headはヘッダー部分、footはフッター部分、bodyは検索式の説明、tipsは検索のコツ(検索に失敗したときに表示される。)、result.*は検索結果の表示用である。
ここで、問題が発生。
この方法では検索結果を表示するときの

<h1>Results:</h1>
<p>
References: [ Ruby: 15 ]

</p>
<p><strong> Total <!-- HIT -->15<!-- HIT --> documents matching your query.</strong></p>

<dl>

から

</dl>
<p>
<strong>Current List: 1 - 15</strong><br>
<strong>Page:</strong> <strong>[1]</strong> </p>

の部分が直せない(はず)。HTMLのソースにこだわる人にはちょっと残念な仕様である。

CGIの設定(3)

それでもなんとかしたかったので、色々調べてみると、pnamazuと言うものがあるではないか。
さっそくダウンロードしてみるが、、、ソースが汚い。その時点で99%採用する気がうせましたが、テンプレートも同じような仕様になっているらしい。

ということで、結局自分で内部でnamazuを呼ぶようなCGIをRubyで作成して、見た目(ソース)も綺麗にすることに。
CGI内で普通に以下の"ような"コードを実行すると、

print `namazu #{query} /webroot/namazu/index`

You should use "namazu.cgi" instead of "namazu" command.
と怒られてしまう。
どうやら、元々namazuコマンドとnamazu.cgiは一つだったが、CGIの脆弱性などの理由で分割したときに 今まで通りnamazuをCGIとして呼ばれては困るのでこのようなエラーをだすらしい。つまり、CGI(を通して)ではnamazuは実行できないようになっている。

しかし、(2)のような状態もいまいちなので、無理矢理CGIからnamazuを呼ぶようにしてみる。
namazuのソースコードを見てみると、namazu-cmd.cの中に以下の部分を発見。

if (getenv("QUERY_STRING") && getenv("SCRIPT_NAME")) {
  /*
  * If invoked as CGI, print a help message and exit.
  *
  * NOTE: Since "namazu" command and "namazu.cgi" had
  * been same until 1.9.13, there might be a lot of
  * people trying to use "namazu" command as CGI. But
  * since 1.9.14, they are different and we cannot
  * use "namazu" command as CGI any longer.
  */
  printf("%s %s" CRLF CRLF, MSG_MIME_HEADER, contenttype);
  printf("You should use \"namazu.cgi\" instead of \"namazu\" command.");
  exit(EXIT_FAILURE);
}

「"namazu"コマンドはCGIとして使えません」と書いてあるが、、、
QUERY_STRINGSCRIPT_NAME消せばいんじゃん!
ってことで、

ENV["SCRIPT_NAME"]=nil
ENV["QUERY_STRING"]=nil
print `namazu #{query} /webroot/namazu/index`

のような感じにすると何事もなかったかのようにnamazuが使えた。
あとは、`namazu ...`の返り値の文字列をうまく処理してやればよい。

ちなみにこれと同じ事がNamazu: メイリングリスト Re: cgi の中で namazuコマンドを使う方法についてに書いてあった。

セキュリティに関して

namazuがCGIから利用できなくなったのは(namazuとnamazu.cgiに分裂したのは)、問題があったからです。
詳しくはNamazu: セキュリティに関する考察を見て下さい。
CGIの設定(3)で紹介した方法はそのままではかなり問題があります。
このような方法を用いる場合は各自そのへんを考慮して対策を施して下さい。

なお、このような問題を抱えているにも関わらず、このような方法を紹介したのはnamazu.cgiのHTMLの(テンプレートなどの)仕様が気に入らなかったからで、 今後よくなることを(こっそり)願っているからです。

追記

全文検索システム NamazuNamazu: 関連リンク集
rbnamazuというものを発見!
もっとはやく気づいていたら・・・。

2003/05/07サイトリニューアルとGoogleにコンテンツの一部が登録されたのを機に、当サイトのnamazuによる全文検索の利用は終了しました。

スポンサード リンク

トラックバック

トラックバックURL
https://linux-life.net/tb/vine/workstation/application/namazu/
Linux Life 〜 No linux, No life 〜
Vine Linux > ワークステーション > アプリケーション > Namazu