このページでは全文検索エンジンNamazuの索引データベース作成のためのmknmzrcの設定について初心者/ビギナー向けに解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
全文検索システムNamazuの構築

全文検索エンジンとは

Namazuのインストール

Namazuのファイル構成

Apacheによる公開設定

索引作成のための設定

mknmzによる索引の作成

検索出力のための設定

namazu.cgiによる検索の実行

出力デザインのカスタマイズ

Namazu検索窓の設置

Namazuの運用のポイント


索引データベース作成用設定ファイル"mknmzrc"の編集

Namazu の索引 データベース を作成するプログラム "mknmz" は、設定ファイル "mknmzrc" を参照してデータベースの作成を行いますので、まずこれを最適化する必要があります。

まず、 サブネット 内の適当な クライアント機 から SSHクライアント 構築中のLinuxサーバー ログイン します SSHクライアントでサーバーに接続する(WBEL3) SSHクライアントでサーバーに接続する(CentOS3) SSHクライアントでサーバーに接続する(WBEL4) SSHクライアントでサーバーに接続する(CentOS4)

それから su コマンド アカウント "root" に変更し、 nano エディタで "/var/www/namazudata/mknmzrc" を開きます nanoエディタでファイルを開く

[tanaka@web1 ~]$ su -Enter
Password: "root"のパスワードを入力します。 Enter
[root@web1 ~]# nano /var/www/namazudata/mknmzrcEnter


nanoで/var/www/namazudata/mknmzrcを開く
nanoで"/var/www/namazudata/mknmzrc"を開く

基本的な書式は、

[ ディレクティブ 名] = [パラメータ]

です。

[ディレクティブ名]と"="と[パラメータ]の間はスペースまたはTabで区切ります。スペースとTabの数に決まりはありませんので、設定が見やすいように適宜調整してかまいません。

なお、[パラメータ]は 正規表現 に準じた書式になります。

また、一つのディレクティブの終わりには必ず ";" をつけなければなりませんので注意が必要です。

"#" 以降の行はコメント文として設定値からは無視されますので、注釈や設定を一時無効にするときなどに利用してください。

また、 "mknmz" デーモン ではありませんので設定を書き換えれば次の実行時に必ず反映されます。

Namazuの解説書です

以下、設定ファイル中の行数を基準に主要な ディレクティブ について解説しますが、バージョンアップや記述の方法によっては多少行数がずれるかもしれませんので注意してください。

このページの先頭へ↑

デフォルトは"/usr/share/namazu/pl/conf.pl"

最初のディレクティブ packege conf; は、 「このファイルの記述をmknmzの設定として使う」 という宣言ですので、 "#" が付けられていません。
これをコメント化すると設定ファイルとして扱われなくなりますので注意してください。

設定を行う前の"/var/www/namazudata/mknmzrc"を実際に見てみるとわかりますが、すべての ディレクティブ の先頭に "#" が付けられています。

実は "mknmz" は、"/var/www/namazudata/mknmzrc"に明示的に設定が行われていない場合には、 デフォルト の設定値として、 "/usr/share/namazu/pl/conf.pl" の内容が参照されるようになっています。

"/var/www/namazudata/mknmzrc"と"/usr/share/namazu/pl/conf.pl"の内容を見比べてみると解りますが、"/var/www/namazudata/mknmzrc"の中で各ディレクティブの先頭に "#" が付けられていることを除けば、これらの記述内容はほとんど同じです。

/var/www/namazudata/mknmzrcの記述の一部
/var/www/namazudata/mknmzrcの記述の一部

/usr/share/namazu/pl/conf.plの記述の一部
/usr/share/namazu/pl/conf.plの記述の一部

つまり、"/var/www/namazudata/mknmzrc"の中で "#" によって無効化されているディレクティブは、現実にはそのままの値で"/usr/share/namazu/pl/conf.pl"の中で有効化されていることになります。

従って"/var/www/namazudata/mknmzrc"の編集を行うときのポイントは、

「デフォルトのままで構わないディレクティブには手を加えず、明示的に変更したいディレクティブだけ内容を書き換え、先頭の"#"をはずす。」

という手順になります。

「じゃあ、わざわざ"/var/www/namazudata/mknmzrc"を修正しなくても、直接"/usr/share/namazu/pl/conf.pl"を編集したほうが解りやすいのでは?。」

と思われるかもしれませんが、これはお勧めしません。

なぜなら、例えば 構築中のLinuxサーバー 上で複数の コンテンツ を運用する場合、それぞれの索引データベースの作成のルールが異なるとすれば、これを"/usr/share/namazu/pl/conf.pl"という一つの初期設定ファイルだけで制御することはできないからです。

そこで一般的には、"/usr/share/namazu/pl/conf.pl"の記述には手を加えずに、デフォルトとは異なる設定を行いたいディレクティブだけを"/var/www/namazudata/mknmzrc"で有効化して運用するようにしてください。

そのほうが後々面倒がありません。

このページの先頭へ↑

主要ディレクティブの設定

"/var/www/namazudata/mknmzrc" で設定するパラメータの多くは、 正規表現 で記述しますが、正規表現にあまりなじみのない方にとってはちょっと難しく思えるかもしれません。

説明が煩雑になりますのでこのパートでは正規表現の記述法については詳しくは触れませんが、 デフォルト のパラメータの意味を理解していけば実用範囲内での記述はさほど難しいものではないと思います。

また、 ディレクティブ のいくつかは デフォルト のままで全く問題のないものもありますが、これについても説明が煩雑になりますので説明を割愛します。

package conf;〜設定ファイルの宣言

WBEL CentOS とも 4行目 あたりに記述があります。

先のコラムで少し触れましたし、注釈にも英語で説明がありますが、「このファイルの内容をmknmzが参照する設定ファイルとする。」という宣言ですので、この記述は 必須 です。

package conf; # Don't remove this line!

もちろん、記述例としてバックアップ保存しておいたい場合などに限ってコメント化しておくことになるかもしれません。

$ADDRESS〜連絡先メールアドレスの設定

WBEL CentOS とも 10行目 あたりに記述があります。

検索結果ページや検索語の入力ページなどの末尾に付加される連絡先の電子メールアドレスの記述です。

# $ADDRESS = 'webmaster@';

この ディレクティブ は、

「この検索ページについてご意見やご要望があればご連絡ください。」

という連絡先を表示する意味しかありません。

従って、このディレクティブをどうするかは個人の判断によりますが、マナーを重視して連絡先を表示させたい場合は "#" をはずして自分で受信できる電子メールアドレスを記述します。

$ADDRESS = 'tanaka@obenri.com';
要は Apache ServerAdmin ディレクティブ ApacheのServerAdminディレクティブについて と考え方は同じです。

ただし、動的に生成されるページとはいえ、インターネット上に電子メールアドレスを公開することに変わりはありませんから、これに設定されたメールアドレスには遅かれ早かれ スパムメール が舞い込んでくるのは避けられないと思ってください。

もしも電子メールによる連絡先を明記したくない場合には、

$ADDRESS = '';

のように記述します。コメントアウトしたままにしておくと、"/usr/share/namazu/pl/conf.pl"に記述されているメールアドレス(多分架空)が表示されてしまいますので注意してください。

$HTML_SUFFIX〜HTML接尾後の設定

WBEL CentOS とも 21行目 あたりに記述があります。

mknmzが索引 データベース を作成するときに HTML ファイルとしての接尾語( WindowsOS 風にいえば拡張子)を設定します。

# $HTML_SUFFIX = "html?|[ps]html|html\\.[a-z]{2}";

パラメータは "|" で区切られて複数設定されていますが、これを順に解釈すると デフォルト では、

・htm及びhtml ("?"は直前の文字はあってもなくても構わないというメタ文字)。

・phtmlとshtml (htmlの前にpかsがくっついたもの。)

・html.jaやhtml.ukなど (html.の後ろにa-zの任意の二文字がくっついたもの)。

これら以外の接尾語がHTMLファイルとして コンテンツ に使われている場合は、 "|" でパラメータを増やして 正規表現 を用いて追加しますが、一般的には追加の必要はないはずですからこのままでOKです。

この ディレクティブ の値は、一つの変数として宣言され、次の "$ALLOW_FILE" ディレクティブの中で用いられます。

$ALLOW_FILE〜索引の対象とするファイル名の指定

WBEL CentOS とも 29行目 あたりから記述があります。

mknmzが索引 データベース を作成する場合の作成対象とするファイルの種類を指定する ディレクティブ です。WBEL3及びCentOS3と、WBEL4及びCentOS4で多少記述が異なりますが、以下にWBEL3またはCentOS3の場合の記述内容を示します。

# $ALLOW_FILE = ".*\\.(?:$HTML_SUFFIX)|.*\\.txt" . # HTML, plain text
#        "|.*\\.gz|.*\\.Z|.*\\.bz2" .    # Compressed files
#        "|.*\\.pdf|.*\\.ps" .       # PDF, PostScript
#        "|.*\\.tex|.*\\.dvi" .       # TeX, DVI
#        "|.*\\.rpm|.*\\.deb" .       # RPM, DEB
#        "|.*\\.doc|.*\\.xls|.*\\.ppt" .  # Word, Excel, PowerPoint
#        "|.*\\.j[sabf]w|.*\\.jtd" .    # Ichitaro 4, 5, 6, 7, 8
#        "|\\d+|[-\\w]+\\.[1-9n]";     # Mail/News, man

コンテンツ のディレクトリの中にこれらの接尾語(拡張子)が含まれているファイルが見つかれば、mknmzはその中の テキスト 情報を探し出して索引データベースに含めることになります。

デフォルト では以上のように8つのカテゴリのファイルの種類が対象になっていますが、今回は HTML ファイルと テキスト ファイルだけを対象にしますので、一行目の記述だけを有効にします。

$ALLOW_FILE = ".*\\.(?:$HTML_SUFFIX)|.*\\.txt"; # HTML, plain text
#        "|.*\\.gz|.*\\.Z|.*\\.bz2" .    # Compressed files
#        "|.*\\.pdf|.*\\.ps" .       # PDF, PostScript
#        "|.*\\.tex|.*\\.dvi" .       # TeX, DVI
#        "|.*\\.rpm|.*\\.deb" .       # RPM, DEB
#        "|.*\\.doc|.*\\.xls|.*\\.ppt" .  # Word, Excel, PowerPoint
#        "|.*\\.j[sabf]w|.*\\.jtd" .    # Ichitaro 4, 5, 6, 7, 8
#        "|\\d+|[-\\w]+\\.[1-9n]";     # Mail/News, man

このように、必要な行のコメント記号 "#" をはずし、有効にする最後のパラメータの後に ";" を付ければOKです。

$DENY_FILE〜索引の対象としないファイル名の指定

WBEL3 及び CentOS3 44行目 、WBEL4及びCentOS4は 48行目 あたりに記述があります。

mknmzが索引 データベース を作成する場合の作成対象から除外するファイルを指定する ディレクティブ です。 デフォルト では、

# $DENY_FILE = ".*\\.(gif|png|jpg|jpeg)|.*\\.tar\\.gz|core|.*\\.bak|.*~|\\..*|\x23.*";

となっていて、画像ファイルや圧縮ファイル、バックアップファイル、ドットファイル ドットファイルについて などがその対象になります。

また、上の "$ALLOW_FILE" と内容が重なっている場合はこちらが優先されますから、例えば "$ALLOW_FILE" の条件に一致してしまうファイルの中で、個別に索引データベースからはずしたいものがある場合に利用します。

例えば CGI でしばしば利用されるテキスト形式のユーザーリストなどがコンテンツ内のディレクトリに含まれる場合は、先頭の "#" をはずして設定を有効化し、そのファイル名を追記しておくと安心です。

例えばそのファイル名が "e_mail.dat" ならば、

$DENY_FILE = ".*\\.(gif|png|jpg|jpeg)|.*\\.tar\\.gz|core|.*\\.bak|.*~|\\..*|\x23.*|e_mail.dat";

のように記述しておきます。

$EXCLUDE_PATH〜索引対象としないディレクトリ名

WBEL3 及び CentOS3 50行目 、WBEL4及びCentOS4は 54行目 あたりに記述があります。

mknmzが索引 データベース を作成する場合の作成対象から除外するディレクトリを指定する ディレクティブ です。 デフォルト では、

# $EXCLUDE_PATH = undef;

となっていて、除外設定されているディレクトリはありません。

例えば、 CGI のフォームメールやBBS、メールマガジンなどの補助 HTML ファイルや、個人の覚え書き、単純に画像を表示するだけが目的のHTMLファイルなど、索引データベースに含めても仕方がないファイルが一つのディレクトリ内にまとめられていれば、このディレクティブを使って最初から除外しておくことができます。

例えば、イメージデータを集めたディレクトリが、

"/var/www/html/*/images/〜"

に、フォームメールセットが、

"/var/www/html/form_mail/〜"

に収められていてこれらを除外したければ、

$EXCLUDE_PATH = "/images/|/var/www/html/form_mail/";

と記述します。これで任意の階層にある "/images/" 絶対パス "/var/www/html/form_mail/" が最初から索引データベースの対象からはずれることになります。

$DIRECTORY_INDEX〜索引中で省略するファイル名

WBEL3 及び CentOS3 58行目 、WBEL4及びCentOS4は 62行目 あたりに記述があります。

索引 データベース 中で、明示的にファイル名を記録させないファイル名を指定します。 デフォルト では、

# $DIRECTORY_INDEX = "";

となっていて、省略設定されているファイル名はありません。

この設定は Apache "DirectoryIndex" ディレクティブ DirectoryIndexについて に対応するものですから、例えばそれぞれに "index.html" を設定しておくと検索結果からもindex.htmlの表示が消えてすっきりとさせることができます。

しかしながら、この ディレクティブ には何も設定を行わず、 デフォルト のまま使用することをお勧めします。

このディレクティブが常にApacheの設定と一致していなければならないことは容易に想像できると思いますが、もしもその設定を誤ると、検索結果から正常にページを表示できなくなる恐れがあるからです。

また、もともとApacheの "DirectoryIndex" は、

URL の表記を簡略化して広告的に見栄えを良くし、URLを直接入力させるときの手間を省く。」

のが目的ですが、 Namazu をサイト内検索に利用する限りにおいては広告的な見栄えは関係ありませんし、ページの呼び出しは検索結果のリンクをクリックするだけですからURLの入力が簡単になっても意味を持ちません。

それよりも設定ミスによる「つまらないリンク切れ」を起こしてしまうリスクのほうが影響が大きいことを考慮すれば敢えて設定は行わないほうがいい、ということになるわけです。

$SEARCH_FIELD〜索引として作成するデータ

WBEL3 及び CentOS3 70行目 、WBEL4及びCentOS4は 74行目 あたりに記述があります。

索引 データベース 中に書き出すデータの種類を設定します。 デフォルト では、

# $SEARCH_FIELD = "message-id|subject|from|date|uri|newsgroups|to|summary|size";

となっています。

この中で、 "message-id" "to" は検索対象がメールデータの場合、 "newsgroups" は検索対象がニュースグループの場合に意味を持つ要素ですから、今回のように対象がWeb コンテンツ の場合は意味を持ちません。

Perl で動作する "mknmz" はただでさえ動作負荷が大きいので、

$SEARCH_FIELD = "subject|from|date|uri|summary|size";

と、不要な索引データの出力をなくし、できるだけ無駄な処理を行わせないようにしましょう。

$ON_MEMORY_MAX〜処理に使用するメインメモリ容量

WBEL3 及び CentOS3 102行目 、WBEL4及びCentOS4は 112行目 あたりに記述があります。

mknmzが索引の作成に利用する メインメモリ の容量の上限を指定します。単位は バイト です。

# $ON_MEMORY_MAX = 5000000;

mknmzは索引データベースの作成処理中にこの制限を越えそうになると、いったん作成作業を中断して データベース ファイルにデータの書き出しを行い、メインメモリを開放してから作業を続行します。

つまりこの値を大きくとればそれだけ索引データベースの生成作業は早くなります。

通常は デフォルト で構いませんが、 サーバー のメインメモリに余裕がある場合は、

$ON_MEMORY_MAX = 20000000;

のように変更すると良いでしょう。

$FILE_SIZE_MAX〜処理対象のファイルサイズの上限

WBEL3 及び CentOS3 110行目 、WBEL4及びCentOS4は 120行目 あたりに記述があります。

ここで設定した値より大きなサイズのファイルを索引データベース作成の対象から除外します。単位は バイト です。 デフォルト は、

# $FILE_SIZE_MAX = 2000000;

つまり、2MBを超えるファイルは無条件に索引データベースに含まれなくなります。

この ディレクティブ は、例えば補助プログラムをインストールして "*.pdf" "*.xls" などを検索対象として扱う場合に意味のあるものです。

これらのファイルは大きな バイナリ データを含むことが多いために、テキスト形式ファイルの場合のサイズ上限の設定、 "$TEXT_SIZE_MAX" とは別にディレクティブが設けてあるわけです。

特に設定の変更は必要ありません。

$TEXT_SIZE_MAX〜処理対象のテキストサイズの上限

WBEL3 及び CentOS3 116行目 、WBEL4及びCentOS4は 126行目 あたりに記述があります。

ここで設定した値より大きなサイズの テキスト 形式のファイルを索引データベース作成の対象から除外します。単位は バイト です。 デフォルト は、

# $TEXT_SIZE_MAX = 600000;

つまり、600KBを超えるファイルは無条件に索引データベースに含まれなくなります。

600KBというと日本語の文字数に直すと30万文字です。つまり普通の文庫本一冊分に相当する分量です。

通常の HTML ファイルでは200KBを超えるようなものは稀ですので、対象がHTMLファイルだけであればこの制限にひっかかるケースはあまりないでしょう。

もしも コンテンツ の中にそれ以上のサイズのHTMLファイルやテキストファイルが含まれている場合は、例えば、

$TEXT_SIZE_MAX = 2000000;

のようにコメント記号 "#" をはずして値を大きく設定してください。

%Weight〜タグごとの重要度の設定

WBEL3 及び CentOS3 127行目 、WBEL4及びCentOS4は 137行目 あたりに記述があります。

Namazu による検索で複数のページがヒットした場合に、上からどういう順序で表示されるかは、それぞれのページの スコア と呼ばれる数値で判断されますが、そのスコアを計算するときの HTML タグごとの基本数値を設定する ディレクティブ です。

# %Weight =
#   (
#   'html' => {
#     'title' => 16,
#     'h1'   => 8,
#     'h2'   => 7,
#     'h3'   => 6,
#     'h4'   => 5,
#     'h5'   => 4,
#     'h6'   => 3,
#     'a'   => 4,
#     'strong' => 2,
#     'em'   => 2,
#     'kbd'  => 2,
#     'samp'  => 2,
#     'var'  => 2,
#     'code'  => 2,
#     'cite'  => 2,
#     'abbr'  => 2,
#     'acronym'=> 2,
#     'dfn'  => 2,
#   },
#   'metakey' => 32, # for
#   'headers' => 8, # for Mail/News' headers
# );

この デフォルト 値に従えば、例えばある HTML ファイルの中で、 "namazu" という語句が12個記述されているとして、その内訳がmeta"キーワード、title"タグ、"h1"タグに一つづつ、"a"タグに三つ、そして上記のタグに該当しないところに六つ記述されていたとすると、

32×1個 + 16×1個 + 8×1個 + 4×3個 + 1×6個 = スコア74点

という計算が行われてスコアが決定し、 "namazu" という語句で検索されたときの点数となります。

そしてこのスコアの大きい順に検索結果が表示されるわけです。

デフォルトでは、ヘッダ関連とタイトルに高い基礎点が設けられ、次いで見出しタグ、リンクタグ、強調タグの順に低くなります。

「リングタグをもっと重視したい」というような場合には、このディレクティブの先頭の "#" をすべて削除して設定を有効にし、適当に値を変更してください。

$INVALID_LENG〜重要度を除外する文字数の設定

WBEL3 及び CentOS3 159行目 、WBEL4及びCentOS4は 169行目 あたりに記述があります。

先の "%Weight" で重要度設定が有効になるタグに記述された場合で、その重要度から除外する連続文字数を設定する ディレクティブ です。

# $INVALID_LENG = 128;
単位は バイト ですので、すべて日本語の場合は64文字になります。

例えば"h1"タグで挟んでも、その文字列の長さが128バイトを超える場合は "%Weight" の重要度を適用しない、という意味になります。

必要であれば先頭の "#" を削除して設定を有効にし、適当に値を変更してください。

$MAX_FIELD_LENGTH〜見出しの文字数の設定

WBEL3 及び CentOS3 165行目 、WBEL4及びCentOS4は 175行目 あたりに記述があります。

検索結果の見出しとして表示される一つのページの最大文字数を設定する ディレクティブ です。

# $MAX_FIELD_LENGTH = 200;
単位は バイト ですので、すべて日本語の場合は100文字になります。

デフォルト では、対象となるファイルが HTML の場合は見出しタグ"h1"から順に、 テキスト ファイルの場合は文頭から200文字が「検索結果の画面」の見出しとして表示されるようになります。

必要であれば先頭の "#" を削除して設定を有効にし、適当に値を変更してください。

$TEMPLATEDIR〜テンプレートのパスの設定

WBEL3 及び CentOS3 205行目 、WBEL4及びCentOS4は 215行目 あたりに記述があります。

mknmzが索引データベースを作成する際に参照するテンプレートファイルの パス を設定する ディレクティブ です。

デフォルト では、

# $TEMPLATEDIR = "@TEMPLATEDIR@";

となっていますが、 "@TEMPLATEDIR@" Namazu インストール が行われたときのテンプレートのパスである、 "/usr/share/namazu/template" を示す 環境変数 です。

今回はオリジナルのテンプレートを利用しますので、先頭の "#" を削除して設定を有効にし、以下のように書き換えてください。

$TEMPLATEDIR = "/var/www/namazudata/template";

テンプレートファイルの位置については Namazuのファイルレイアウトについて を参考にしてください。

このサイトは既に更新を終了していますが、今のところ店じまいの予定はありません。 リンクフリー ですので、趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。
Powered by Apache
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。
www.centos.org - The Community ENTerprise Operating System