pnamazu に関して、過去にいただいた質問/今後いただきそうな質問と、 その回答をまとめておきます。

pnamazu では、多くの場合、 「Windows マシンでインデックスを作って、プロバイダで動かす」という、 形態で使用されているようです。 そのため、「インデックス環境 ≠ 検索環境」であることに起因する難しさ もあるように思います。

これって、何をするもの?

Namazu のシステムは、大きく分けると、

から構成されます。pnamazu は、後者の代替品です。おそらく使われ方の多くは、

  1. web コンテンツを作りました。
  2. 自分の PC に namazu をインストールして、コンテンツの検索ができるようにしました。
  3. これは便利!
  4. じゃあ、自分の契約しているプロバイダ (や、レンタルサーバ) に転送して公開しよう!
  5. でも、自分のプロバイダ/レンタルサーバでは、 C コンパイルができないから、検索プログラムを置けない
  6. 仕方がない、pnamazu でも使うしかないか…

という感じだと思われます。

ローカルでは動いたんだけど、プロバイダでは動かない

次のことをもう一度ご確認ください。

  1. そもそも、そのプロバイダで CGI は使えるのか
  2. 動かすためのサーバの設定 (.htaccess とか) は正しいか (何らかの CGI が使えるところまでは、なんとか自力で到達してください)
  3. ftp でインデックスを転送する際、必ずバイナリモードにする
  4. ファイルのパーミッションの設定
  5. .namazurc でのディレクトリの設定

設定を書き換えた (または、改造した) ら、動かなくなった

一連のスクリプトは、EUC-JP で書かれています。 Windows では、Shift_JIS で書かれている前提で動作しているエディタなど もあり、そういうエディタで編集すると、スクリプトがどうなるか、 分かりません。とりあえず、

  1. ワードパッドで編集するのはやめましょう。
  2. 編集したら、"perl -c ファイル名" として文法エラーがでないことを確認しましょう。

部分一致 (前方/中間/後方/正規表現) 検索をしたときに、 どんな語に展開されたかが表示されるのがうっとうしい

パラメータに detail=off を加えてください。具体的には、例えば、 <input type="hidden" name="detail" value="off"> なんてのを入れてみてください。

replace がどうもうまくいかないんだけど…

pnamazu では、申し訳ないことに、replace の設定が、 大変分かりにくくなっています。 本家同様、「"replace" 変換元 変換先」と書くことは変わり無いのですが、

  1. 各項をタブで区切った場合、変換は単純に文字列の置換となります。
  2. 各項をスペースで区切った場合、変換には正規表現が用いられます。
  3. 単純置換と正規表現置換の両方にマッチする場合、単純置換が優先されます。
  4. 複数の単純置換にマッチする場合、最長一致したものが優先されます。
  5. 複数の正規表現置換にマッチする場合、後に設定したものが優先されます。

Namazu は 1.3 系と 2.0 系とでインデックスに互換性が無いけれど、 pnamazu は、どちらに対応しているの?どちらが良いの?

レンタルサーバを使ってて、index や template が読み込めないようなんだけど…

レンタルサーバ (プロバイダでもそういうところがあるかも) では、通常、複数の顧客で共有する形態をとるため、ftp なり telnet でアクセスした際には、他人のディレクトリが見えないようにするため、 自分のホームディレクトリがルートディレクトリであるかのように見えるように 設定しているところがあります。例えば、コンテンツの転送の際には、 /public_html/index に置いたつもりで、.namazurc に

Index /public_html/index

と設定しても、真の位置は、/usr/home/hogehoge/public_html/index だったりするわけです。その場合、システムからは「/public_html/index なんてディレクトリは無いから読めん」ということになります。

というわけで、これらの設定には、真のディレクトリ位置を書くようにしてください。

.namazurc の template の扱いが本家と微妙に違うみたい

確かに違います。perl 版の動作は次のようになっています。

NMZ.{head,body,tips,foot} に関しては、インデックスを一つだけ指定した場合は、 そのインデックスのディレクトリのものが優先されますが、 複数指定した場合、一つも指定しなかった場合には template ディレクトリ のファイルが使われます。

NMZ.result.* に関しては、常に、インデックスと同じディレクトリのもの が使用されます。複数インデックスの検索をして、複数のインデックスから 文書がヒットした場合、文書毎にそれぞれが属するインデックスのテンプレ ートになります。

and 検索をしていて、ヒットしないひらがな語があるのに、件数が 0 にならないことがあるんだけど…

perl 版は初期の版から「ヒットしないひらがな語は演算対象としない」 という仕様があり、作者の好みにより、この動作がデフォルトになって います。この動作を変えるには、pconfig.pl の中の $HWMode という 変数を 'on' にして下さい。

opmode=inside を使ったら、かえって日本語がヒットしなくなってしまったんだけど…

あらかじめ、補助インデックスを作っておいてください。 インデックスのあるディレクトリで、同梱の bwnmz.pl を perl bwnmz.pl のように実行すると、 NMZ.m NMZ.mi NMZ.s NMZ.si という 4 つのファイルができます。


furukawa@tcp-ip.or.jp