全文検索エンジンソフト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(と作成したインデックスファイル)があれば、ほとんどの環境で動作するでしょう。プロバイダごとに環境は異なりますから、自分のプロバイダ環境を確かめた上で自己責任で設置作業を行ってください。
以下のソフトウェアが必要です。
以上のソフトウェアは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)を展開した場合、以下のような設定になります。
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(環境変数)に以下のような記述が書かれていると思います。
Windowsを再起動後、MS-DOSプロンプト(Windows2000、XPはコマンドプロンプト)から
のコマンドを実行して、どちらも正常に結果が表示されれば、インストールは成功です。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が設定されない場合があります。その場合はシステム環境変数に記述を追加してください。
続いて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>"
ローカルで使う場合は上記の設定でいいと思います。
続いてインデックスを作成します。Cドライブのhomepageというフォルダに入っているファイルのインデックスを作りたい場合、MS-DOSプロンプトで
と入力します。-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からできるようになっています)やAnhttpd、Apache 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などをエディタで編集します。インデックス作成の前に編集しておくと、いちいち書き換える必要がありません。
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へのパスに書き換えます。
一般的には上のどちらかになるはずです(wakwakは特殊で、#!bin/perlです)。書き換えたらファイル名をpnamazu.cgiからnamazu.cgiに変えて保存してください。
インデックスファイルはすべてバイナリモード、namazu.cgiはテキスト(アスキー)モードで転送します。転送先はとりあえず同じフォルダにしてください。namazu.cgiのパーミッションは755です。ブラウザからnamazu.cgiにアクセスして無事に表示されることを確認してください。
cgi-binディレクトリにCGIスクリプト以外を置けないプロバイダの場合はインデックス用に別のディレクトリを作ってください。
プロバイダで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のマニュアルも熟読してください。
(1)アンカータグごとにインデックスファイルを分割する
インデックスを作る際、アンカータグ<A NAME=×××>〜</A>ごとに分割すると、検索結果から直接そのアンカーにジャンプできます。1ファイルが長い場合に便利です。mknmzに--html-splitオプションを付けて実行するだけです。
(2)複数インデックスを作る
検索をジャンルごとに分けたい場合やホームページを2つ以上持っている場合、インデックスを複数作り、Namazuを利用する人にインデックスを選択してもらうと便利です。
例えば、「シネマ1987online」の場合、cinema(シネマ1987online)とdiary(映画とネットのDIARY)という2つのインデックスを作っています。mknmzはそれぞれ以下のように実行します(--html-splitオプションはなくてもかまいません)。
namazu ┣namazu.cgi ┣.namazurc ┣search.html(検索ページ。別のフォルダでも可) ┣template(テンプレートファイルのフォルダ) ┃ ┗NMZ.head.jaなど6個のテンプレートファイル ┗index(インデックスのフォルダ) ┣cinema(インデックスファイルのフォルダ) ┗diary(インデックスファイルのフォルダ)
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フォルダは、なくてもかまいません。例えば、上の例では.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を利用しましょう。インデックスを選択してもらうためにコメントアウトされた部分をコピーし、書き換えます。
同じ要領で検索フォームも作ります。下の例のようなページを作ってください。
search.htmlの例
cinemaインデックスとdiaryインデックス、テンプレートファイルのNMZ.head.jaにも上のようなチェックボックスを作ります。
search.htmlはどこに置いてもかまいませんが、
<form method="get" action="{cgi}">の{cgi}の部分はnamazu.cgiの位置を相対パスか絶対パスで明示する必要があります。namazuフォルダに置いた場合は
これで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を作る必要があるわけです。
(3)バッチファイルを作る
インデックス作成時にいちいちMS-DOSプロンプトやコマンドプロンプトを起動してmknmzのコマンドを入力するのは面倒かもしれません。その場合はバッチファイルを作っておくと便利です。バッチファイルはメモ帳や秀丸などのエディタで以下のように記述します。
これに例えば、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コードで保存しても使えます(下にある圧縮ファイルよりこちらの方が新しい場合が多いです)。
機能は今のところ、
以上の7つですが、このCGIを誰でもアクセスできるページに表示していると、4の機能によって検索ロボットが延々と検索する恐れがあります。と言うか、実際私のサイトではそうなりました。サンプルは現在、検索できないようにしてあります。表に出さず、リンクを張らないことをお勧めします。なお、ver.0.16からnlviewとnlsortを統合してあります。
設置はCGIスクリプトのお約束通り、以下の利用規程に同意できる方のみに限ります。
【ダウンロード】
NMZ.slog Viewer ver.0.20 (zip形式、nlview.cgi、nlsort.cgi、nlday.cgi同梱)
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を自分のサイトに設置した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に
と書き加えると、jumpというボタンができます。これを押すと、検索結果の最上位のページにジャンプします。
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が使えるなら、コマンドラインから
と実行した方がいいでしょう。もちろん、この場合もサーバーにかかる負荷はほとんど変わらないと思います。
tiny_mknmz.cgiのメリットは.namazurcを自動生成することと、インデックスのサイズが小さいこと。インデックスは350ファイルの場合、1.07MB。正規に作成した場合の半分以下になります。
ただし、使ってみた限りでは今のところ、正規のインデックスをNamazu for Win32で作成した方がいいように思えます。使用はホームページのファイルの更新が頻繁で、しかも通信速度が遅くてFTPが面倒な場合に限られるのではないかと思います。
今後改良が進めば、大変有用なスクリプトになることは間違いありません。UNIX版はどうしてもある程度の知識が要求されますから、CGIだけの設定でサーバー上でインデックスが作成できる魅力は大きいと思います。
pnamazu-2001.11.03からハイパー日記システムのインデックス作成に対応したそうです。
サイト内に検索キ−ワードがなかった場合、Namazuは検索方法の説明を表示します。このページに同じキーワードをGoogleなど他のサーチエンジンで検索できるようにリンクを張ってみましょう。以下のスクリプトを使うと、リンクをクリックするだけで、検索エンジンにキーワードを渡します(※2002年10月17日までのスクリプトはサーバーエラーとなるバグがありました)。
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に書くことで表示できるようになりました。
Windowsの定番エディタ秀丸からNamazuを使うマクロが「Namazuを飼い馴らす」というページで紹介されています。検索マクロ (nmzsrc.mac ver 0.1)とNamazu 用タグジャンプ (nmztag.mac ver 0.2)の2つを使いますが、大変優秀なマクロで、秀丸から検索とファイルへのジャンプができるようになります。この2つのマクロを統合して(ちょっと改造し)、インデックス作成の機能を付け加えたマクロを書いてみました。
秀丸からマクロを起動すると「検索」「ジャンプ」「インデックス作成」「終了」の4つのメニューが出てきます。それをクリックするか、カーソルで選んでEnterキーを押すと、処理を実行します。
スクリプトは下のリンクに置いてあります。
ファイル名を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の起動が絡むので検索結果の表示は、遅いパソコンでは当然遅くなります。
表示するブラウザはMozillaやネットスケープに変えることもできますが、IE以上に遅くなるでしょう。検索結果を表示するHTMLファイル(result.html)はC:\tempフォルダに出力されます。たいていのWindowsでは標準でできているはずですが、ない場合は事前に作成しておいてください。IEやインデックスフォルダのパス指定は$idx = "c:\\namazu\\var\\namazu\\index";のように\が2つ必要ですので、ご注意。
Namazuはフリーソフトとして公開され、多くの人がさまざまな環境で利用できるよう努めてきました。このページもNamazu設置に何かの役に立てれば、と思います。最後にNamazu関連のリンクを紹介しておきます。
★Namazuホームページ(全文検索システム Namazu)※Namazu正規版のソースをプロバイダのサーバーでコンパイルし、C言語版namazu.cgiを作成する手順をNamazu正規版インストール覚え書きというページにまとめてみました。私自身の個人的な例ですから、普遍性はないかもしれませんが、少なくとも「さくらインターネット」をご利用の方はこの手順通りに行えば、正規版(C言語版)のnamazu.cgiが利用できるはずです。また、ハイパー日記システムファイル(hnfファイル)をローカルでインデックス作成する方法(ハイパー日記システムでpnamazuを使おう)も書いてみました。この日記システムのユーザーでまだNamazuを使っていない方はご参照ください。
このほか、何か疑問がある場合はNamazu ML(win32版のMLもあります)に加入されることをお勧めします。過去のメールはMLに加入されなくてもNamazuホームページから検索できます。
このページの記述には間違いがあるかもしれません。間違いを見つけられた場合はご連絡いただければ幸いです。