全文検索 namazu を使おう

By Reinin Oyama

設定

さあ これで、設定をしましょう。
cd /usr/local/etc/namazu
で設定ファイルのあるところへ行き、
cp mknmzrc-sample mknmzrc
cp namazurc-sample namazurc
とやって、サンプルを複写し、
vi で、編集します。
mknmzrc は、
$HTML_SUFFIX = "html?|[ps]html|html\\.[a-z]{2}|htm|HTM";
と、変更しました。私は若干変更したので。
$ALLOW_FILE の部分は、全部 # を外してコメントでなくします。
あとは、適当にコメント # を外してしきます。
%Weight
$NKF
$KAKASI
$WAKATI
などの # を外します。
また、念のため
$LIBDIR = "/usr/local/share/namazu/pl";
$FILTERDIR = "/usr/local/share/namazu/filter";
$TEMPLATEDIR = "/usr/local/share/namazu/template";
も追加しておきます。(デフォルトで良いかも)
namazurc は、
Index /usr/local/var/namazu/index
これは、好きなディレクトリーを指定できますが、とりあえずデフォルトのまま。
Template /usr/local/var/namazu/index
実は、インデックスと同じで良いんだけど?なぜこれを設定するか不明。
Replace は、apache などの http サーバが、外に見せているアドレスに
ディレクトリーを対応させる。
例:
Replace /usr/local/www/html/groups/home http://www2.hasiru.net
Replace /home/tooru/public_html/ http://www2.hasiru.net/~tooru/
このへんは、あまり賢くない。
Lang ja_JP.SJIS
ContentType "text/html; charset=Shift_JIS"
Charset "ja_JP.SJIS" "Shift_JIS"
どうも、namazu は、なるべく Shift_JIS で扱った方が良いようである。
テンプレートも少し直さないと、一瞬文字化けする現象が出ます。
/usr/local/share/namazu/template/NMZ.head.ja の8行目あたりに、
<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=Shift_JIS'>
などと追加します。

さて、ここで、問題です。
ファイル名が、EUC-JP 以外のコードになっていると、文字化けする不具合があります。
でも、これは、簡単に直ります。
実は、
/usr/local/share/namazu/pl/gfilter.pl
の filename_to_title という関数をいじれば、直ります。
即ち、$title を EUC-JP に変換してやれば、良いのです。
Shift_JIS の場合は、78行あたりを、
my $title = codeconv::shiftjis_to_eucjp($filename);
などにしてやれば、良いのです。
UTF-8 の場合は、変換モジュールを持ってこないとだめですが。(Encode::from_to など_utf8_off が必要かも)
後日、まだ文字化けしているので、よく見ると、前のほうで変な変換をしていたので、
全てコメントにしました。これ(名前を付けてリンク先を保存として.txtを.plに)
もうひとつ問題があります。
/usr/local/share/namazu/filter/html.pl です。
HTML に UTF8 の数値文字参照が、含まれていると、正しく動作しません。
気に入らないので直しました。
use Encode; で、モジュールを読み込んで、
decode_numbered_entity 関数を
sub decode_numbered_entity ($) {
my ($num) = @_;
my $utf8;

# FIXME: very ad hoc. (ISO-8859-1)
#return ""
# if (($num >= 0 && $num <= 31) || ($num >= 127 && $num <= 159) ||
# ($num >= 256));
#return ""
# if $num >=127 && util::islang('ja');
$utf8 = sprintf ("%c",$num);
Encode::_utf8_off($utf8);
Encode::from_to($utf8, 'utf8', 'eucJP');
return $utf8;
}
なんて感じに直した。
ここに、完成品(名前を付けてリンク先を保存として.txtを.plに)

ところで、
web から見る場合は、namazu.cgi を外から見えるところに置かないだめです。
cp /usr/local/libexec/namazu.cgi /usr/local/www/cgi-bin/.
などとします。
他の人に見られたくない場合は、認証の必要なところへ置きます。

前へ  次へ