全文検索システム Namazu の perl 版の検索プログラムです。
2006.02.28 までのバージョンには、cross-site scripting 問題が残っていました。 2006.12.23 にバージョンアップしてください。
2002.11.16 までのバージョンには、Directory Traversal 問題がありました。
2001.11.28 までのバージョンは、cross-site scripting 問題が残っていました。
2001.11.30 は、idxname を指定しない、デフォルトのインデックスを使う方法の検索ができませんでした。
perl で書かれていることを生かして、正規版にはない特長を備えています、 と言いたいところですが、その特長は、どんどん失われつつあり、 遅さだけが残った、という気もしています。
ことが、製作を始めたころの、最大のメリットでした。 しかし、 Win32 用にはバイナリパッケージがありますし、 UN*X 上でも、最近の namazu は、./configure; make で、 コンパイルは簡単です。
perl 版のメリットは、「perl しか使えないプロバイダでも使える」 ことくらいしかないでしょう。
<select name="opmode">
<option selected value="normal">すべての語を含む
<option value="or">いずれかの語を含む
<option value="inside">単語の一部でも有効
<option value="forward">先頭部分の一致でも有効
</select>
というのをいれておくことが考えられます。
配付条件などは、基本的に正規版 namazu と同じとします。 無保証ですので at your own risk にて使って下さい。
pnamazu-2006.12.23.tar.bz2
マニュアル
履歴
NMZ.body.ja (pnamazu 版)
NMZ.tips.ja (pnamazu 版)
附属のインデックス作成プログラム (tiny_mknmz.cgi) のマニュアル
# 2006.12.23 # ! cross-site scripting 問題の修正 # ! 簡易表示ができなくなっていた問題の修正 # + NMZ.result に ${uri::decode} と書くと、% + 16進数のパターンを # デコードするようにした # * nmz-filter.pl というツールを同梱。インデックス内の単語を取捨 # 選択して、サイズを減らすことができます # ! tiny_mknmz.cgi が multipart のメールを処理する際に、boundary # の文字列によっては異常終了していたのを修正 # ! 設定ファイルの読み込みに失敗するのを修正 # (Thanks to MORIMOTO Hidenobu さん) # ! replace で \1, \2, ... が使えなくなっていたのを修正 # (Thanks to 小川建一さん) # ! サーバによっては grep 機能が働かなかったのを修正 # (Thanks to Yoshi Nagata さん) # * tiny_mknmz で、タイムスタンプが新しくなった場合だけでなく、 # 古くなった場合、サイズが変わった場合もインデックスを再作成 # ! subject=title の読みかえが、ソートフィールドには使えなかった # のを修正 (Thanks to 青山 啓さん) # ! フィールドでソートする際、数字か文字列かの判定条件が緩かった # のを修正 (Thanks to 青山 啓さん) # ! grep する際、ファイル名の % + 16 進数をデコードするようにした # (Thanks to kou19 さん) # ! grep する際、ファイルを読み込むサイズと表示行数を制限できるようにした # ! tiny_mknmz.cgi が html のコメントを処理するようにした # + NKF.pm (2.0.4以上) があれば使うようにした。その場合は utf-8 も可
pnamazu に関して、過去にいただいた質問/今後いただきそうな質問と、 その回答をまとめておきます。
pnamazu では、多くの場合、 「Windows マシンでインデックスを作って、プロバイダで動かす」という、 形態で使用されているようです。 そのため、「インデックス環境 ≠ 検索環境」であることに起因する難しさ もあるように思います。
Namazu のシステムは、大きく分けると、
から構成されます。pnamazu は、後者の代替品です。おそらく使われ方の多くは、
という感じだと思われます。
次のことをもう一度ご確認ください。
一連のスクリプトは、EUC-JP で書かれています。 Windows では、Shift_JIS で書かれている前提で動作しているエディタなど もあり、そういうエディタで編集すると、スクリプトがどうなるか、 分かりません。とりあえず、
パラメータに detail=off を加えてください。具体的には、例えば、 <input type="hidden" name="detail" value="off"> なんてのを入れてみてください。
pnamazu では、申し訳ないことに、replace の設定が、 大変分かりにくくなっています。 本家同様、「"replace" 変換元 変換先」と書くことは変わり無いのですが、
レンタルサーバ (プロバイダでもそういうところがあるかも) では、通常、複数の顧客で共有する形態をとるため、ftp なり telnet でアクセスした際には、他人のディレクトリが見えないようにするため、 自分のホームディレクトリがルートディレクトリであるかのように見えるように 設定しているところがあります。例えば、コンテンツの転送の際には、 /public_html/index に置いたつもりで、.namazurc に
Index /public_html/index
と設定しても、真の位置は、/usr/home/hogehoge/public_html/index だったりするわけです。その場合、システムからは「/public_html/index なんてディレクトリは無いから読めん」ということになります。
というわけで、これらの設定には、真のディレクトリ位置を書くようにしてください。
確かに違います。perl 版の動作は次のようになっています。
NMZ.{head,body,tips,foot} に関しては、インデックスを一つだけ指定した場合は、 そのインデックスのディレクトリのものが優先されますが、 複数指定した場合、一つも指定しなかった場合には template ディレクトリ のファイルが使われます。
NMZ.result.* に関しては、常に、インデックスと同じディレクトリのもの が使用されます。複数インデックスの検索をして、複数のインデックスから 文書がヒットした場合、文書毎にそれぞれが属するインデックスのテンプレ ートになります。
perl 版は初期の版から「ヒットしないひらがな語は演算対象としない」 という仕様があり、作者の好みにより、この動作がデフォルトになって います。この動作を変えるには、pconfig.pl の中の $HWMode という 変数を 'on' にして下さい。
あらかじめ、補助インデックスを作っておいてください。
インデックスのあるディレクトリで、同梱の bwnmz.pl を
perl bwnmz.pl
のように実行すると、
NMZ.m NMZ.mi NMZ.s NMZ.si という 4 つのファイルができます。