[トップページ][全文検索ソフト(Perl版)徹底比較][Namazu正規版インストール覚え書き]

Namazu(Perl版)設置ノウハウ


全文検索エンジンソフトNamazuはサーバー内検索ソフトとして最も有名で、高速・高性能です。フリーソフトという手軽さもあり、公的私的を問わず多くのサイトで利用されています。元々はUNIX用に開発されたプログラムですが、Windows環境でも動作するバイナリプログラム(Namazu for Win32)が配布されています。また、コンパイルやtelnetできない環境の人向けにCGIで動作するPerl版の検索スクリプトも用意されています。このページではこのNamazu for Win32とPerl版(pnamazu)を使い、一般のプロバイダ(UNIXサーバー)を利用している人向けにインストールの概要と便利な使い方を説明します。
 Namazuはバージョン2.0からファイル構成が大幅に変わりました。KakasiとnkfをPerlモジュール化することによって、インデックスの作成が大幅に速くなり、ファイルサイズも半分程度になりました。設置に必要なソフトとほとんどの情報はインターネットで公開されています。このページは設置以前の問題(CGIやPerlに関する事項)を一から説明するわけではありません。Namazuに付属するマニュアルなどの補完説明として読んでください。

 このページの記述はUNIXサーバーが対象です。動作確認したのはローカルがWindows98、2000、XP(Apache for win32使用)、サーバーは@niftyのMy Sweet Homepage(OSはSolaris、サーバーはApache)と「さくらインターネット」の「さくらWeb」(OSはFreeBSD、サーバーはApache)、「WAKWAK」(OSはFreeBSD、サーバーはApache)だけです。もっともpnamazuはperl(と作成したインデックスファイル)があれば、ほとんどの環境で動作するでしょう。プロバイダごとに環境は異なりますから、自分のプロバイダ環境を確かめた上で自己責任で設置作業を行ってください。

    インデックス
1.Namazu Version2.x for Win32のインストール
2.namazurcの設定
3.インデックスの作成
4.Perl版を使う
5..namazurcの転送
6.Tips
  (1)アンカータグごとにインデックスファイルを分割する
  (2)複数インデックスを作る
  (3)バッチファイルを作る
  (4)ブラウザから検索ログを見る(nlview.cgi、nlsort.cgi、nlday.cgi)
  (5)C-SEARCHを併用する
  (6)I'm Feeling Lucky
  (7)tiny_mknmz.cgi
  (8)他のサーチエンジンで再検索する
  (9)秀丸でNamazu for Win32を使う
7.終わりに
  付記

1.Namazu Version2.x for Win32のインストール

以下のソフトウェアが必要です。

  1. Namazu for Win32 (Windows向けプログラム)
  2. Kakasi for Win32 (日本語分かち書きプログラム)
  3. ActivePerl (ご存じパール。インデックス作成に使います)

以上のソフトウェアはNamazu for Win32のホームページからダウンロードできます。KakasiはZIP、あとの2つは自己解凍形式で圧縮してあります。Windows95の方はこのほかにDCOM for Windows 95(search-s for Namazuにリンクがあります)が必要です。ActivePerlのインストール前にインストールしてください。

バージョン1.3xをインストールしていた人はAcrive Perlを既にインストール済みですから、改めてインストールする必要はありません。kakasiは最新版の辞書が必要なので、再インストールすることになります。以前のバージョンをアンインストールし、V2.31以降のアーカイブを起動ドライブに展開(解凍)してください。インストーラーは付いていないので、自分でAutoexec.batにパスを設定する必要があります。Cドライブのkakasiというフォルダにアーカイブ(ZIP)を展開した場合、以下のような設定になります。

SET PATH=C:\kakasi\bin;%PATH%
SET KANWADICTPATH=C:\kakasi\share\kakasi\kanwadict
SET ITAIJIDICTPATH=C:\kakasi\share\kakasi\itaijidict

Windows2000、XPの場合は設定−コントロールパネル−システム−詳細設定からシステム環境変数を編集してください(例えば、変数にKANWADICTPATH、値にC:\kakasi\share\kakasi\kanwadictなどと入力します)。Windows2000、XPをWindows98などとデュアルブートで使っている場合はWindows2000、XPをインストールしたドライブにこれらのプログラムをインストールすることをお勧めします。

うまく設定できた場合、コマンドプロンプト(MS−DOSプロンプト)からkakasi -vと実行すると、以下のようなメッセージが出ます(WindowsXPの場合)。

C:\Documents and Settings\hiro>kakasi -v
KAKASI - Kanji Kana Simple Inverter  Version 2.3.4
Copyright (C) 1992-1999 Hironobu Takahashi. All rights reserved.

Usage: kakasi -a[jE] -j[aE] -g[ajE] -k[ajKH] -E[aj] -K[ajkH] -H[ajkK] -J[ajkKH]
              -i{oldjis,newjis,dec,euc,sjis} -o{oldjis,newjis,dec,euc,sjis}
              -r{hepburn,kunrei} -p -s -f -c"chars"  [jisyo1, jisyo2,,,]

      Character Sets:
       a: ascii  j: jisroman  g: graphic  k: kana (j,k     defined in jisx0201)
       E: kigou  K: katakana  H: hiragana J: kanji(E,K,H,J defined in jisx0208)

      Options:
      -i: input coding system    -o: output coding system
      -r: romaji conversion system
      -p: list all readings (with -J option)
      -s: insert separate characters (with -J option)
      -f: furigana mode (with -J option)
      -c: skip chars within jukugo (with -J option: default TAB CR LF BLANK)
      -C: romaji Capitalize (with -Ja or -Jj option)
      -U: romaji Upcase     (with -Ja or -Jj option)
      -u: call fflush() after 1 character output
      -w: wakatigaki mode

Report bugs to <bug-kakasi@namazu.org>.

Windowsを再起動した後、Namazu for Win32をインストールします(旧バージョンがある場合はアンインストールし、Namazuに関するAutoexec.batの記述も消しておいてください)。これはインストーラー付きですから簡単です。デフォルトの設定でCドライブのnamazuフォルダにインストールすることをお勧めします(Windows2000、XPの方は起動ドライブにしてください)。成功した場合、Autoexec.bat(環境変数)に以下のような記述が書かれていると思います。

REM ###### Namazu for Win32 Environment variable setting
SET PATH=C:\namazu\bin;"%PATH%"
SET NAMAZURC=C:\namazu\etc\namazu\namazurc
SET NAMAZULOCALEDIR=C:\namazu\share\locale
SET MKNMZRC=C:\namazu\etc\namazu\mknmzrc
SET HOME=C:\namazu

Windowsを再起動後、MS-DOSプロンプト(Windows2000、XPはコマンドプロンプト)から

namazu --help
mknmz --help

のコマンドを実行して、どちらも正常に結果が表示されれば、インストールは成功です。mknmz --helpの実行結果は以下のように表示されます。

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\hiro>mknmz --help
mknmz 2.0.12, Namazu のインデックス作成プログラム

使い方: mknmz [オプション]<対象>...

対象ファイル:
  -a, --all                すべてのファイルを対象とする
  -t, --media-type=MTYPE   対象ファイルの文書形式を指定する
  -h, --mailnews           --media-type='message/rfc822' と同じ
      --mhonarc            --media-type='text/html; x-type=mhonarc' と同じ
  -F, --target-list=FILE   インデックス対象のファイルのリストを読み込む
      --allow=PATTERN      対象とするファイル名の正規表現を指定する
      --deny=PATTERN       拒絶するファイル名の正規表現を指定する
      --exclude=PATTERN    除外するパス名の正規表現を指定する
  -e, --robots             次の記述を含む HTMLファイルを除外する
                           <meta name="ROBOTS" content="NOINDEX">
  -M, --meta               HTMLの metaタグをフィールド指定検索に用いる
  -r, --replace=CODE       URIを置換するためのコードを指定する
      --html-split         HTMLファイルを <a name="..."> 単位で分割処理する
      --mtime=NUM          変更日制限 find(1) の -mtime と同じ規則
                           例: -50 で 50 日以内、+50 で 50 日より古いものだけ

形態素解析:
  -c, --use-chasen        日本語の単語のわかち書きに ChaSen を用いる
  -k, --use-kakasi        日本語の単語のわかち書きに KAKASI を用いる
  -m, --use-chasen-noun   名詞のみを抽出する
  -L, --indexing-lang=LANG インデックス時に言語に特化した処理を行なう

文字列処理:
  -E, --no-edge-symbol  単語の両端の記号は削除する
  -G, --no-okurigana    送り仮名を削除する
  -H, --no-hiragana     平仮名のみの単語は登録しない
  -K, --no-symbol       記号をすべて削除する

要約:
  -U, --no-encode-uri       URIのencodeを行わない
  -x, --no-heading-summary  HTML のヘディングによる要約作成を行わない


インデックス作成:
      --update=INDEX        更新するインデックスを指定する
  -Y, --no-delete           削除された文書の検出を行わない
  -Z, --no-update           文書の更新・削除を反映しない

その他:
  -s, --checkpoint        チェックポイント機構を作動させる
  -C, --show-config       現在の設定を表示する
  -f, --config=FILE       設定ファイルを指定する
  -I, --include=FILE      カスタマイズ用ファイルを読み込む
  -O, --output-dir=DIR    インデックスの出力先を指定する
  -T, --template-dir=DIR  NMZ.{head,foot,body}.* のディレクトリを指定する
  -q, --quiet             インデックス処理の最中にメッセージを表示しない
  -v, --version           ヴァージョンを表示する
  -V, --verbose           口やかましいモード
      --debug             デバッグモード
      --help              このヘルプを表示する

バグ報告は <bug-namazu@namazu.org> へどうぞ

表示されなかった場合はインストールに失敗しています。自分の経験から言うと、Perlのバージョンが古い場合、失敗することがあるようです。Active Perlのbuild522以降をインストールしてください。 また、XP環境ではSET HOME=C:\namazuが設定されない場合があります。その場合はシステム環境変数に記述を追加してください。

2.namazurcの設定

続いてNamazuの設定ファイルnamazurcの設定をします。namazurcはC:\namazu\etc\namazu\namazurcにあるnamazurc-sample.win32をnamazurcにリネームして内容を書き換えます。namazurcはデフォルトでは以下のような記述になっています(必要な部分のみ引用)。

Index         C:\namazu\var\namazu\index
#Template      C:\namazu\share\namazu\template
#Replace       /home/foo/public_html/  http://www.foo.bar.jp/~foo/
#Logging       off
Lang          ja_JP.SJIS
#Scoring       tfidf
#EmphasisTags  "<strong class=\"keyword\">"   "</strong>"

Cドライブのhomepageというフォルダをインデックスの対象にした場合、以下のような記述になります。

Index         C:\namazu\var\namazu\index
Template      C:\namazu\share\namazu\template
#Replace       /C\|/homepage/  http://www.foo.bar.jp/~foo/
#Logging       off
Lang          ja_JP.SJIS
#Scoring       tfidf
EmphasisTags  "<strong class=\"keyword\">"   "</strong>"

ローカルで使う場合は上記の設定でいいと思います。

3.インデックスの作成

続いてインデックスを作成します。Cドライブのhomepageというフォルダに入っているファイルのインデックスを作りたい場合、MS-DOSプロンプトで

C:\mknmz -O C:\namazu\var\namazu\index C:\homepage

と入力します。-Oはインデックス作成の引数で、インデックスの作成場所を指定します。ない場合はカレントディレクトリにインデックスファイルが書き出されます(参考:mknmzの引数一覧)。マニュアルにはインデックスの作成に時間がかかる場合、メモリー割当量を増やすと効果があると書かれています。C:\namazu\etc\namazu\mknmzrc.win32の101行目$ON_MEMORY_MAX = 5000000;を書き換えてください。デフォルトで5MBとなっているのはメモリー64MBのパソコンを想定しているそうです。128MBのパソコンなら$ON_MEMORY_MAX = 10000000;としてもいいでしょう。先頭の#を削除するのをお忘れなく。
 Windows2000、XPをDドライブにインストールしている人でインデックスがうまく作成できなかった場合はD:\namazu\bin\mknmzを見てください。そこの47行目から50行目に以下の記述があります。

my $CONFDIR       = "c:/namazu/etc/namazu";     # directory where mknmzrc are in.
my $LIBDIR        = "c:/namazu/share/namazu/pl";      # directory where library etc. are in.
my $FILTERDIR     = "c:/namazu/share/namazu/filter";   # directory where filters are in.
my $TEMPLATEDIR   = "c:/namazu/share/namazu/template"; # directory where templates are in.

Cドライブを参照するようになっていますので、すべてDドライブに変えてください。私もこれで失敗しました(Namazu2.0.6 for Win32で発生しました。バグかもしれません。最新版を使ってみてください)。
 インデックスの作成に成功すると、54個のファイルができます。検索はMS-DOSプロンプトのほか、必要に応じてwin32版のGUI検索クライアントsearch-s for Namazu機能を大幅に強化したバージョン0.92が7月27日に公開されました。インデックス作成もsearch-sからできるようになっています)やAnhttpdApache for win32を使ってブラウザから試してみてください(Apacheのhttpd.conf設定例)。
 AnhttpdやApacheで使用する場合はC:\namazu\libexecにあるnamazu.cgi.exeを使用します(もちろん、以下に述べるpnamazuを使っても構いません)。設定ファイルnamazurcを、MS-DOSプロンプトで.namazurc(先頭に"."を付けることに注意)とコピー、リネームし、namazu.cgi.exe、インデックスファイルと同じフォルダに入れてください。また、Windows95/98の場合、Anhttpdで普通にnamazu.cgi.exeを呼び出してもプログラムのダウンロードになってしまいます。http://127.0.0.1/foo/bar/cgi-bin/namazu.cgi.exe?のように最後に?を付けて呼び出してください。
 また、ローカルで使う場合、ディレクトリやファイル名に日本語を使っていると、URIエンコードされて検索結果にジャンプできません。こういう場合はmknmzに-Uオプションを付けると、エンコードされません(もちろんプロバイダのサーバー上では日本語のファイル名はやめた方がいいです)。

無事にインストールできたのにうまく検索できない場合(「インデックスは古いフォーマットであるべきです」とのメッセージが出た場合)は設定ファイル.namazurcの記述をもう一度、確認する必要があります。このメッセージは本来、バージョン1.3xのNamazuから2.0以降にバージョンアップした場合に、「インデックスの形式が違うので検索できない」という意味なのですが、バージョン2.0以降のNamazuを初めてインストールした場合は「Namazuがインデックスの場所を見つけられない」ということを意味しています。つまり「設定ファイルに誤りがあります」というエラーメッセージだと思った方がいいでしょう。たいていはパスの間違いなど単純なミスによるものが多いようです(最新バージョンではこのメッセージは「インデックスが開けませんでした」に変わっています)。
 また、ローカルでPerl版を使って検索する場合、Anhttpdのバージョンによってはうまく動作しません。Apache for win32の使用を推奨します。
 検索結果の画面をカスタマイズするにはC:\namazu\share\namazu\templateにあるNMZ.head.jaやNMZ.foot.jaなどをエディタで編集します。インデックス作成の前に編集しておくと、いちいち書き換える必要がありません。

4.Perl版を使う

Perl版(pnamazu)はバージョン2.0xのアーカイブには入っていません。プロバイダのホームページでPerl版を使いたい場合は以下のリンク(Perl版の作者古川令さんのページ)からダウンロードしてください。

http://www01.tcp-ip.or.jp/~furukawa/pnamazu/

pnamazu.cgiの最新バージョンはpnamazu-2006.12.23です。古川さんのページには詳しいマニュアルもあります。

pnamazuはtar.bz2で圧縮してあります。これを解凍してできたpnamazuフォルダの中にあるpnamazu.cgiの1行目をプロバイダのPerlへのパスに書き換えます。

#!usr/local/bin/perl
#!usr/bin/perl

一般的には上のどちらかになるはずです(wakwakは特殊で、#!bin/perlです)。書き換えたらファイル名をpnamazu.cgiからnamazu.cgiに変えて保存してください。

インデックスファイルはすべてバイナリモード、namazu.cgiはテキスト(アスキー)モードで転送します。転送先はとりあえず同じフォルダにしてください。namazu.cgiのパーミッションは755です。ブラウザからnamazu.cgiにアクセスして無事に表示されることを確認してください。
 cgi-binディレクトリにCGIスクリプト以外を置けないプロバイダの場合はインデックス用に別のディレクトリを作ってください。

5..namazurcの転送

プロバイダでNamazuが無事に動いても安心してはいけません。よく見ると、検索結果に表示されるファイルへのパスが/C|/homepage/などローカルのパスになっていると思います。これをhttp://…形式の絶対パスにするには設定ファイル.namazurcを書き換えて同じフォルダに転送する必要があります。ドット・ファイル(“.”で始まる設定ファイル)をcgi-binディレクトリに転送できない場合があるようです。この場合は“.”を取ってnamazurcにしても大丈夫です。wakwakで動作確認しています。

Index         home/public_html/namazu
#Template      C:\namazu\share\namazu\template
Replace       /C\|/homepage/  http://www.foo.bar.jp/~foo/
#Logging       off
Lang          ja_JP.SJIS
#Scoring       tfidf
EmphasisTags  "<strong class=\"keyword\">"   "</strong>"

1行目のIndexにはインデックスを置いたフォルダをサーバー上の絶対パスで書きます。これはFTPソフトに表示されるパスを書いた方が正確です。public_htmlがあるサーバーの場合は上のように“/home/public_html/namazu”となるでしょう。Replaceは最初に検索対象のローカルフォルダ、次にあなたのホームページのURLを書きます。“|”の前に¥を書いてエスケープする必要があります。設定を有効にするには有効にしたい項目の先頭の#を削除します。項目はタブかスペースで区切ります。置換の際に区別されますから、大文字と小文字はどちらかに統一する必要があります。タブで区切ってうまくいかない場合はスペースで区切ってみてください。pnamazuはタブで区切ると単純置換、スペースで区切ると正規表現を用いて変換します。詳しくはpnamazuのマニュアルを参照してください。
 書き換えたら、インデックス、namazu.cgiと同じフォルダにテキストモードで転送します。ブラウザからアクセスして検索結果の表示がhttp://…になっていたら、設置は成功です。それまで無事に動いていたのに、.namazurcを転送した後、ページが表示されなくなった場合は、記述に誤りがあるのが原因です。もう一度、.namazurcの記述を確認してください。私も何度も経験しましたが、たいていの場合、パスの誤りが原因でした。
 古川さんのページおよびpnamazuのアーカイブにはQ and A HTMLがあります。pnamazuのマニュアルとNamazuのマニュアルも熟読してください。

6.TIPS

(1)アンカータグごとにインデックスファイルを分割する
 インデックスを作る際、アンカータグ<A NAME=×××>〜</A>ごとに分割すると、検索結果から直接そのアンカーにジャンプできます。1ファイルが長い場合に便利です。mknmzに--html-splitオプションを付けて実行するだけです。

mknmz --html-split -O C:\namazu\var\namazu\index C:\homepage

 ただし、バージョン2.0.4のこの機能にはバグがあり、更新したファイルだけでなく、すべてのファイルを対象にインデックスを作ってしまうそうです(2.0.5以降では直っているようです)。この機能を使ってインデックスを作る際はいったん古いインデックスを削除して作り直すことをお勧めします。また、アンカーを日本語で書いている場合は文字化けします。英数字で書きましょう。

(2)複数インデックスを作る
 検索をジャンルごとに分けたい場合やホームページを2つ以上持っている場合、インデックスを複数作り、Namazuを利用する人にインデックスを選択してもらうと便利です。
 例えば、「シネマ1987online」の場合、cinema(シネマ1987online)とdiary(映画とネットのDIARY)という2つのインデックスを作っています。mknmzはそれぞれ以下のように実行します(--html-splitオプションはなくてもかまいません)。

mknmz --html-split -O C:\namazu\var\namazu\index\cinema C:\cinema
mknmz --html-split -O C:\namazu\var\namazu\index\diary C:\diary

 この2つのフォルダをサーバー上のフォルダnamazuに転送します。namazuにはこのほかnamazu.cgiと.namazurcがあります。ここで重要なのはテンプレートファイルが必要なこと。namazuフォルダにtemplateというフォルダを作り、中にNamazuのテンプレートファイル6個(NMZ.head.ja、NMZ.foot.ja、NMZ.body.ja、NMZ.result.normal.ja、NMZ.result.short.ja、NMZ.tips.ja)を入れます。それぞれ好きな表示になるようにアレンジしてください。
 フォルダ構成は以下の通りです。
  namazu
   ┣namazu.cgi
   ┣.namazurc
   ┣search.html(検索ページ。別のフォルダでも可)
   ┣template(テンプレートファイルのフォルダ)
   ┃ ┗NMZ.head.jaなど6個のテンプレートファイル
   ┗index(インデックスのフォルダ)
     ┣cinema(インデックスファイルのフォルダ)
     ┗diary(インデックスファイルのフォルダ)
 続いて.namazurcに必要な記述を書き加えます。
Index         home/public_html/namazu/index
Template      home/public_html/namazu/template
Replace       /C\|/homepage/  http://www.foo.bar.jp/~foo/
Replace       /C\|/diary/    http://www.baz.bar.jp/~hoo/diay/
#Logging       off
Lang          ja_JP.SJIS
#Scoring       tfidf
EmphasisTags  "<strong class=\"keyword\">"   "</strong>"
 今回はTemplateの場所をしっかり書いてください。Replaceは同じ書き方でいくつでも書けます。

※と、長く書いてきましたが、私の勘違いだったようで、Templateフォルダは、なくてもかまいません。例えば、上の例では.namazurcの設定でIndexとTemplateを以下のようにすると、cinemaフォルダのNMZ.head.jaなどがテンプレートになります。

Index         home/public_html/namazu/index
Template      home/public_html/namazu/index/cinema

ただ、Templateを独立したフォルダにしておいた方が、表示をコントロールしやすいかもしれません。

続いてインデックスを選択するための検索ページsearch.htmlを作成します。これはNMZ.head.jaを利用しましょう。インデックスを選択してもらうためにコメントアウトされた部分をコピーし、書き換えます。

<strong>検索対象:</strong>
<ul>
<li><input type="checkbox" name="idxname" value="cinema" checked>シネマ1987online
<li><input type="checkbox" name="idxname" value="diary" checked>映画とネットのDIARY
</ul>

 これで以下のようなチェックボックスができます。
検索対象:

同じ要領で検索フォームも作ります。下の例のようなページを作ってください。
search.htmlの例

 cinemaインデックスとdiaryインデックス、テンプレートファイルのNMZ.head.jaにも上のようなチェックボックスを作ります。
 search.htmlはどこに置いてもかまいませんが、
<form method="get" action="{cgi}">の{cgi}の部分はnamazu.cgiの位置を相対パスか絶対パスで明示する必要があります。namazuフォルダに置いた場合は

<form method="get" action="namazu.cgi">
と書き換えてください。

これでsearch.htmlにアクセスすると、検索できるようになります。
なお、NMZ.head.jaに“checked”を書いてnamazu.cgiにアクセスしても、チェックボックスはチェックされません。その理由はNamazuのFAQにあります。以下に引用します。

この理由として namazu.cgi は、CGI引数が渡されたとき、 NMZ.head の中の <form>〜</form>の値を動的に書き換える動作をします。この"checked"の部分も、CGI引数を見て自動的に付加する部分ですが、 NMZ.headに "checked" を書き込んでしまうと、 CGI引数による書き換えが正しく行われません。
ですからsearch.htmlを作る必要があるわけです。
また、search.htmlにチェックボックスを作らず、
<input type="hidden" name="idxname" value="cinema">

など“hidden”属性を付与しても結構です。この場合、無条件にcinemaインデックスを検索します。

(3)バッチファイルを作る
 インデックス作成時にいちいちMS-DOSプロンプトやコマンドプロンプトを起動してmknmzのコマンドを入力するのは面倒かもしれません。その場合はバッチファイルを作っておくと便利です。バッチファイルはメモ帳や秀丸などのエディタで以下のように記述します。

perl C:\namazu\bin\mknmz --html-split -O C:\namazu\var\namazu\index\cinema C:\homepage

これに例えば、index.batやcinema.batなどと適当な名前を付けます(mknmz.batと名付けたくなりますが、Namazu for Win32が使用していますのでやめた方がいいでしょう)。このバッチファイルをクリックすれば、インデックスが作成されます。タスクスケジューラに登録すると、定期的な自動実行もできます。


(4)ブラウザから検索ログを見る(nlview.cgi、nlsort.cgi、nlday.cgi)
 Namazuは検索キーワードとヒット数、検索日時、IPアドレス(HOST)をNMZ.slogというファイルに残します。これを見るにはFTPでインデックスフォルダにアクセスしてダウンロードすればいいのですが、いちいちFTPソフトを開くのは面倒かもしれません。そこでブラウザからNMZ.slogの内容を確認できる簡単なPerlスクリプトを書いてみました。

 【サンプル】「シネマ1987online」のNMZ.slogを表示します
 nlview.cgi
 nlsort.cgi
 nlday.cgi

 【スクリプト】
 nlview.txt
 nlsort.txt
 nlday.txt

以上の3つのスクリプトの拡張子を.cgiに変えてEUCコードで保存しても使えます(下にある圧縮ファイルよりこちらの方が新しい場合が多いです)。

機能は今のところ、

 1.検索キーワードを新しい順に表示。
 2.表示件数を設定できる。
 3.ログの総数が分かる。
 4.表示したキーワードをクリックすると、Namazuで検索できる。
 5.NMZ.slogのファイルサイズを表示する。
 6.キーワードの検索回数を順位別に表示する。(以上、nlview.cgi)
 7.日付を指定して検索キーワードと検索回数を表示する(nlday.cgi)

以上の7つですが、このCGIを誰でもアクセスできるページに表示していると、4の機能によって検索ロボットが延々と検索する恐れがあります。と言うか、実際私のサイトではそうなりました。サンプルは現在、検索できないようにしてあります。表に出さず、リンクを張らないことをお勧めします。なお、ver.0.16からnlviewとnlsortを統合してあります。

設置はCGIスクリプトのお約束通り、以下の利用規程に同意できる方のみに限ります。

スクリプト利用規程
 ・すべて無保証です。
 ・スクリプトの利用、改造・再配布ともフリーです。
 ・設置は自己責任でお願いします。
 ・このスクリプトを利用した事によるどんな損害も私(hiro)は一切の責任を負いません。

【ダウンロード】
NMZ.slog Viewer ver.0.20 (zip形式、nlview.cgi、nlsort.cgi、nlday.cgi同梱)

設置の説明(readme.html)

 表示にJavaScriptとCSSを使っています。インターネット・エクスプローラー、ネットスケープともバージョン4.0以降をご使用下さい。また、動作確認はPerl5環境でしか行っていません。
 バグや改善のアドバイス等ありましたら、hiro宛てにメールで連絡していただくと幸いです。

(5)C-SEARCHを併用する

C-STATIONで配布されていた検索支援ツールC-SEARCHを併用すると、一つの検索フォームでNamazuとGoogleやYahoo!から選んで検索できるようになります。C-SEARCHは作者に再配布の許可をいただきましたので以下のリンクからダウンロードできます。これはC-SEARCH102です。これ以降のバージョンがありましたが、作者のサイトは現在閉鎖中です。また、Googleなど検索エンジンの仕様変更で使えないものもあります。

といっても、Googleで使えなくては意味がありませんので、Google対応の仕方のみ書いておきます。検索フォームを書くHTMLがSJISの場合、以下のように赤字部分を付け加えます。

    google => {
        url     => 'http://www.google.co.jp/search?lr=lang_ja&ie=Shift_JIS&',
        keyword => 'q',
        item    => {
            name    => 'num',
            value   => [10, 20, 30, 50, 100],
        },
    },
C-SEARCHダウンロード→c-search102.zip(ZIP形式)
サンプル(実際に稼働しています)

サイト内(Namazu) Google Yahoo!

C-SEARCHを自分のサイトに設置したNamazuに対応させるには記述を追加する必要があります。スクリプトの改造になりますので、設置は自己責任で行ってください。

C-SEARCHのスクリプトを見ると、20行目あたりからYahoo!など各検索エンジンにキーワードを渡す書式があります。そこに下のような記述を追加します。

 namazu => {
        url     => 'http://www.foo.bar.ne.jp/~hoge/namazu/namazu.cgi?',
        keyword => 'query',
        item    => {
            name    => 'idxname',
            value   => ['index1&idxname=index2'],
        },
    },

urlにnamazu.cgiのURLを書きます(相対パスでも結構です)。valueの行にある'index1&idxname=index2'は複数インデックスの場合で、実際にはindex1、index2ではなくインデックスフォルダの名前を書きます。インデックスが一つの場合はitemのブロックは不要ですので以下のようになります。

        namazu => {
        url     => 'http://www.foo.bar.ne.jp/~hoge/namazu/namazu.cgi?',
        keyword => 'query',
            },

ラジオボタンは以下のような感じで書きます。

<FORM action="./c-search.cgi" target="_top">
<INPUT size="20" type="text" name="keyword" onmouseover="this.focus()"> <INPUT type="submit" value="検索">
<INPUT type="radio" name="name" value="namazu" checked>サイト内(Namazu)
<INPUT type="radio" name="name" value="google"><A HREF="http://www.google.com/">Google</A>
<INPUT type="radio" name="name" value="yahoo"><A HREF="http://www.yahoo.co.jp/">Yahoo!</A>
</FORM>

必要なら、同じ書き方でgooやInfoseekなどを書いてください。

なお、新しいバージョンのC-SEARCHはスクリプトの書き方が少し変わりました。Namazuへの対応は以下のようになります(新しいバージョンが配布されていない以上、この部分の記述はもう不要かもしれませんが、一応残しておきます)。

{
        package C_SEARCH::ENGINE::Namazu;
        
        use base C_SEARCH::ENGINE::AbstractEngine;

        sub new {
                my $class = shift;
                my $self = bless {
                        url                     => 'http://www.foo.bar.ne.jp/~hoge/namazu/namazu.cgi',
                        searchUrl       => 'http://www.foo.bar.ne.jp/~hoge/namazu/namazu.cgi?query=',
                }, $class;
                return($self);
        }
}

 複数インデックスの場合はsearchUrlを次のように書き換えます。

http://www.foo.bar.ne.jp/~hoge/namazu/namazu.cgi?idxname=index1&idxname=index2&query=

ラジオボタンのフォームは以下のようになります。

<FORM method=get action="./c-search.cgi" target="_top">
<INPUT size="20" type="text" name="keyword">
<INPUT type="radio" name="engine" value="Namazu" checked>サイト内
<INPUT type="radio" name="engine" value="Google">Google
<INPUT type="submit" name="work" value="検索">
</FORM>

※C-SEARCHを使う場合、検索フォームのページはSJISで作る必要があります。GoogleがSJISのページから出力されたデータのデコードにしか対応していないためです。EUCのページから出力すると、文字が化けることがあります。


(6)I'm Feeling Lucky

 検索エンジンのGoogleにI'm Feeling Luckyというサービスがあります。このボタンを押すと、検索結果を表示せず、自動的に検索結果の最上位にランクされたページにジャンプします。pnamazuは独自仕様でpnamazu-2001.06.26からこの機能に対応するようになりました。

NMZ.head.jaに

<input type="submit" name="submit" value="jump">

と書き加えると、jumpというボタンができます。これを押すと、検索結果の最上位のページにジャンプします。


検索式:

(7)tiny_mknmz.cgi

pnamazu-2001.08.29からCGIで簡易的インデックスを作るtiny_mknmz.cgiが同梱されました。プロバイダのサーバー上で動作させれば、インデックスが作成できます。
 ただしWindowsではマニュアル通りにやってもインデックスの作成はうまくいきません。マニュアルには

namazu のパッケージ中にある、次のファイルを、(適当に編集して) $index_dir で指定したディレクトリに置きます。 
NMZ.head.* 
NMZ.body.* 
NMZ.foot.* 
NMZ.tips.* 
と、ありますが、このほかにNMZ.result.normal.ja、NMZ.result.short.jaなどをインデックスフォルダに置く必要があるようです。Linuxではマニュアル通りでうまくいきました。

バージョン2001.11.16からインデックス作成時間は大幅に短縮しましたが、ローカル(Windows2000、XP、PentiumIII1GHz、メモリー256MB)で350ファイルを対象にインデックスを作成したところ、91秒。古いスペックのVine Linux2.1.5(K6-2 300MHz、メモリー192MB)では252秒。プロバイダによってはタイムアウトになる場合があるでしょう。これを回避するためtiny_mknmz.cgiは動作させる時間を制限することができます(デフォルトは150秒)。インデックスの更新にも対応していますから、タイムアウトになる前に止めて再び作成を続けることができます。

どうしてもタイムアウトが心配な方はtelnetが使えるなら、コマンドラインから

perl ./tiny_mknmz.cgi

と実行した方がいいでしょう。もちろん、この場合もサーバーにかかる負荷はほとんど変わらないと思います。

tiny_mknmz.cgiのメリットは.namazurcを自動生成することと、インデックスのサイズが小さいこと。インデックスは350ファイルの場合、1.07MB。正規に作成した場合の半分以下になります。
 ただし、使ってみた限りでは今のところ、正規のインデックスをNamazu for Win32で作成した方がいいように思えます。使用はホームページのファイルの更新が頻繁で、しかも通信速度が遅くてFTPが面倒な場合に限られるのではないかと思います。
 今後改良が進めば、大変有用なスクリプトになることは間違いありません。UNIX版はどうしてもある程度の知識が要求されますから、CGIだけの設定でサーバー上でインデックスが作成できる魅力は大きいと思います。
 pnamazu-2001.11.03からハイパー日記システムのインデックス作成に対応したそうです。


(8)他の検索エンジンで再検索する

サイト内に検索キ−ワードがなかった場合、Namazuは検索方法の説明を表示します。このページに同じキーワードをGoogleなど他のサーチエンジンで検索できるようにリンクを張ってみましょう。以下のスクリプトを使うと、リンクをクリックするだけで、検索エンジンにキーワードを渡します(※2002年10月17日までのスクリプトはサーバーエラーとなるバグがありました)。

subsearch.txt

subsearch.txtをsubsearch.cgiにリネームして保存してください。CGIの実行できるディレクトリにアスキーモードで送ります。jcode.plが必要ですので、スクリプトと同じディレクトリに入れるか、パスを正確に書いてください。
 あとはインデックスフォルダにあるNMZ.tips.jaの先頭にこのスクリプトへのリンクを書きます。

<strong style="color:red">他のサーチエンジンで検索</strong>
他のサーチエンジンに同じキーワードを渡して検索します。<BR>
 [ <a href="subsearch.cgi?engine=google">Google</a> ]
 [ <a href="subsearch.cgi?engine=infoseek">Infoseek</a> ]
 [ <a href="subsearch.cgi?engine=yahoo">Yahoo!</a> ]
 [ <a href="subsearch.cgi?engine=goo">goo</a> ]
 [ <a href="subsearch.cgi?engine=excite">Excite</a> ]
 [ <a href="subsearch.cgi?engine=fresh">Fresh Eye</a> ]

サンプル(Namazu正規版)

設置は自己責任で。何か不具合がありましたら、ご連絡ください。

※pnamazu-2002.03.23以降に同梱される出力フォーマットファイル(NMZ.format.ja)を使えば、余計なスクリプトを使わずにGoogleで再検索できます。NMZ.format.jaに以下のように書き、インデックスに入れてください。

リンクの場合
<a href="http://www.google.com/search?lr=lang_ja&q=${key}">Googleで再検索</a>
ボタンの場合
<FORM method=GET action="http://www.google.com/search">
<INPUT TYPE=text name=q size=31 maxlength=255 value="${key}">
<input type=hidden name=hl value="ja">
<INPUT type=submit name=btnG VALUE="Googleで再検索">
</FORM>

${key}で検索キーワードを抽出できます。検索キーワードがなかった場合だけでなく、検索結果のページに常に表示されますが、十分に実用的な機能です。リンクを書き換えれば、Google以外の検索エンジンについても可能です。
 このほか、検索開始時刻 ${start_time}や検索にかかった時間 ${time_to_search}などもNMZ.format.jaに書くことで表示できるようになりました。


(9)秀丸でNamazu for Win32を使う

Windowsの定番エディタ秀丸からNamazuを使うマクロが「Namazuを飼い馴らす」というページで紹介されています。検索マクロ (nmzsrc.mac ver 0.1)とNamazu 用タグジャンプ (nmztag.mac ver 0.2)の2つを使いますが、大変優秀なマクロで、秀丸から検索とファイルへのジャンプができるようになります。この2つのマクロを統合して(ちょっと改造し)、インデックス作成の機能を付け加えたマクロを書いてみました。
 秀丸からマクロを起動すると「検索」「ジャンプ」「インデックス作成」「終了」の4つのメニューが出てきます。それをクリックするか、カーソルで選んでEnterキーを押すと、処理を実行します。
 スクリプトは下のリンクに置いてあります。

namazu.mac.txt

ファイル名をnamazu.macなど拡張子.macの名前に変え、秀丸のインストール先かマクロフォルダ入れ、秀丸でマクロ登録してください。インデックス作成にはバッチファイルが必要です。(3)バッチファイルを作るを参考に作り、パスの通っているところか秀丸のインストール先に置いてください。デフォルトのバッチファイルの名前はmknamazu.batに設定してあります。同じ名前にすると、スクリプトを書き換える必要がありません。また、スクリプトの最初の方にインデックスのあるフォルダの指定があります。間違えないように設定してください。
 もちろんNamazu for Win32がインストールされていなければ、このマクロは使えません。

このマクロは制限があり、インデックスを作る際、--html-splitオプションでアンカータグごとに分割していると、タグジャンプができません。秀丸はアンカー(#)があると、ファイル名として認識しないためです。エディタはブラウザとは異なるので、これは仕方がないでしょう。また、Namazuが作る要約の中に\があってもジャンプできません。秀丸のマクロでは\がエスケープ文字となるためです。

※改造してあるので、不具合について元のマクロ作者へ質問することはご遠慮ください。
元のマクロがCopyleft(http://www.sra.co.jp/public/doc/gnu/Bull17j/Bull17j_6.html)なので、 このマクロもそれに従い、改造・再配布可能です。

タグジャンプできない場合があるのはやはり不便なので、検索結果をHTMLファイルに出力してインターネットエクスプローラーで表示するマクロを書きました。IEの起動が絡むので検索結果の表示は、遅いパソコンでは当然遅くなります。

namazu2.mac.txt

表示するブラウザはMozillaやネットスケープに変えることもできますが、IE以上に遅くなるでしょう。検索結果を表示するHTMLファイル(result.html)はC:\tempフォルダに出力されます。たいていのWindowsでは標準でできているはずですが、ない場合は事前に作成しておいてください。IEやインデックスフォルダのパス指定は$idx = "c:\\namazu\\var\\namazu\\index";のように\が2つ必要ですので、ご注意。


7.終わりに

Namazuはフリーソフトとして公開され、多くの人がさまざまな環境で利用できるよう努めてきました。このページもNamazu設置に何かの役に立てれば、と思います。最後にNamazu関連のリンクを紹介しておきます。

Namazuホームページ(全文検索システム Namazu)
日本語全文検索エンジンソフトウエアのリスト
「Namazuシステムの構築と活用」サポートページ
Windows 2000のIIS 5.0でNamazu for Win32 Version 2.xを動かすには

付記

※Namazu正規版のソースをプロバイダのサーバーでコンパイルし、C言語版namazu.cgiを作成する手順をNamazu正規版インストール覚え書きというページにまとめてみました。私自身の個人的な例ですから、普遍性はないかもしれませんが、少なくとも「さくらインターネット」をご利用の方はこの手順通りに行えば、正規版(C言語版)のnamazu.cgiが利用できるはずです。また、ハイパー日記システムファイル(hnfファイル)をローカルでインデックス作成する方法(ハイパー日記システムでpnamazuを使おう)も書いてみました。この日記システムのユーザーでまだNamazuを使っていない方はご参照ください。

このほか、何か疑問がある場合はNamazu ML(win32版のMLもあります)に加入されることをお勧めします。過去のメールはMLに加入されなくてもNamazuホームページから検索できます。

このページの記述には間違いがあるかもしれません。間違いを見つけられた場合はご連絡いただければ幸いです。


MAIL to:hiro 
[TOP][NEXT]