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

全文検索エンジンとは

Namazuのインストール

Namazuのファイル構成

Apacheによる公開設定

索引作成のための設定

mknmzによる索引の作成

検索出力のための設定

namazu.cgiによる検索の実行

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

Namazu検索窓の設置

Namazuの運用のポイント


索引データベースの作成

設定ファイル "/var/www/namazudata/mknmzrc" の編集が終わったら、 "mknmz" コマンド Namazu の索引 データベース を作成してみましょう。

mknmzの書式は以下のとおりです。

mknmz -f [初期設定ファイル] -O [索引の出力先] [コンテンツディレクトリ]

以下は WBEL3 及び CentOS3 での出力結果です。WBEL4及びCentOS4はこれとは少し異なるメッセージになります。

構築中のLinuxサーバー の処理能力にもよりますが、 コンテンツ の分量が多いときはそれなりに時間を要します。

例えば、「お便利サーバー.com」のコンテンツの場合 お便利サーバー.comのサーバー環境 メインメモリ 512 MB CPU PentiumIII,650MHzという環境で、332ページに対して索引データベースを作成して200秒ほど要します。

コマンドの実行は Ctrl + c で中断することができますから、途中で「おかしい」と思ったときはいつでも実行を中断できます。

[root@web1 ~]# mknmz -f /var/www/namazudata/mknmzrc -O /var/www/namazu
data/db /var/www/html
Enter
検索対象のファイルを調べています...
332個のファイルがインデックス作成の対象として見つかりました
1/332 - /var/www/html/_command/cat01.html [text/html]
2/332 - /var/www/html/_command/cd01.html [text/html]
3/332 - /var/www/html/_command/chmod01.html [text/html]
4/332 - /var/www/html/_command/cp01.html [text/html]
5/332 - /var/www/html/_command/crond01.html [text/html]

〜中略〜

332/332 - /var/www/html/index.html [text/html]
インデックスを書き出しています...
[基本]
日付:         Tue Apr 3 19:40:27 2007
追加された文書の数: 332
サイズ (bytes):   12,853,813
合計の文書数:    332
追加キーワード数:  35,795
合計キーワード数:  35,795
わかち書き:     module_kakasi -ieuc -oeuc -w
経過時間 (秒):    201
ファイル/秒:     1.65
システム:      linux
Perl:        5.008
Namazu:       2.0.12

[root@web1 ~]#

このように、実行中に索引データベースに登録されるファイル名がすべて表示されますので、登録漏れがないか、あるいは登録しないつもりのファイルが登録されてないかを確認しましょう。

また、作成された索引データベースが、 "/var/www/namazudata/db/" 以下に出力されているはずですので、これも確認しておきましょう。

Namazuの索引データベースは一つのデータベースファイルではなく、 テキスト 形式の目次と バイナリ 形式のデータベース、更にテンプレートファイルによって構成されます。

[root@web1 ~]# ls /var/www/namazudata/db/Enter lsコマンドについて
NMZ.body.ja    NMZ.field.subject  NMZ.i         NMZ.slog
NMZ.err      NMZ.field.subject.i NMZ.ii        NMZ.status
NMZ.field.date  NMZ.field.summary  NMZ.log        NMZ.t
NMZ.field.date.i NMZ.field.summary.i NMZ.p         NMZ.tips.ja
NMZ.field.from  NMZ.field.uri    NMZ.pi        NMZ.version
NMZ.field.from.i NMZ.field.uri.i   NMZ.r         NMZ.w
NMZ.field.size  NMZ.foot.ja     NMZ.result.normal.ja NMZ.wi
NMZ.field.size.i NMZ.head.ja     NMZ.result.short.ja
[root@web1 ~]#
Namazuは デフォルト では EUC で日本語を出力しますので、 構築中のLinuxサーバー のシステムの 文字セット がEUCの場合は システムの文字セットについて(WBEL4) システムの文字セットについて(CentOS4) 文字化けせずに表示することができます。

また、索引データベースの作成中に発生したエラーは "NMZ.err" テキスト で出力されていますので cat コマンドなどで内容を確認しておきましょう。

mknmzコマンドは、既に索引データベースが出力されているディレクトリに対して再出力を実行すると、作成対象のファイルの タイムスタンプ を頼りに、内容に変更が加えられたファイルに関するデータの更新と、新規に追加されたファイルに関するデータの追加、そして削除されたファイルに関するデータを削除して、 コンテンツ の内容と索引データベースが一致するようにデータ作成が行われます。

ただし、 "/var/www/namazudata/mknmzrc" の内容を書き換えて出力条件を変更したときは、古い条件で出力された索引データと新しい条件で出力された索引データが混在してしまいますので、こういう場合は一度 rm コマンドで "/var/www/namazudata/db/" 以下のファイルをすべて削除したあとにmknmzコマンドを実行し、最初から索引データベースを作り直すようにします。

このページの先頭へ↑

システム上のコマンド"namazu"でテスト検索を行う

ひとます索引データベースが作成できたら、 構築中のLinuxサーバー 上で検索を行う "namazu" コマンド で検索を行ってみましょう。

コマンドの書式は、

namazu [検索キーワード] [索引データベースのパス]

となります。試しに "named" を検索キーワードとして実行してみます。

ここでは作業の流れからroot アカウント のままコマンドを実行していますが、 "namazu" コマンドは任意のユーザーから実行できます。

[root@web1 ~]# namazu named /var/www/namazudata/dbEnter


コマンドラインでのnamazuの実行結果
コマンドラインでの"namazu"の実行結果

このように検索結果がきちんと表示できれば、索引データベースの出力の設定はひとまずOKです。

このページの先頭へ↑

索引データベース出力用シェルスクリプトの作成

"mknmz" コマンドを実行するときはオプションスイッチが多いのでタイプするのが結構面倒です。

そこで予めオプションスイッチごと記述した シェル スクリプト を作成しておくと便利ですし、実行時のタイプミスなども防ぐことができます。

シェルスクリプトは、例えば以下のような内容になります。

汎用性を高めるため、このシェルスクリプトはカレントディレクトリを移動して実行するように作られています。
従って記述する コマンド はすべて 絶対パス 表記になっています。
コマンドのパスは which コマンドで調べることができます。
#!/bin/bash
cd /var/www/namazudata
/usr/bin/mknmz -f mknmzrc -O db /var/www/html

この内容のテキストファイルを 構築中のLinuxサーバー 上の適当な場所に実行形式で保存すればOKです。

ここではシェルスクリプト名を "makenamazu_def.bash" として作成します。

シェルスクリプトの保存場所は、ユーザーが作成した実行プログラムの格納場所として準備されている "/usr/local/bin" 以下とします。

ファイル名の末尾が ".bash" になっているのは、これがbashのスクリプトファイルであることを表すための「作法」のようなものだと思ってください。
[root@web1 ~]# cd /usr/local/binEnter cdコマンドについて
[root@web1 bin]# nano makenamazu_def.bashEnter nanoエディタについて

      .
      .
  適当な方法で"makenamazu_def.bash"を作成して保存します。
      .
      .


[root@web1 bin]# chmod 755 makenamazu_def.bashEnter chmodコマンドについて  ←実行属性を与えます。
[root@web1 bin]# ls -l makenamazu_def.bashEnter lsコマンドについて
-rwxr-xr-x  1 root   root     183 4月 03 02:48 makenamazu_def.bash
[root@web1 bin]#

"/usr/local/bin" には パス が通っていますので パスが通っているとは 、これでコマンドラインから、

makenamazu_def.bash

と実行するだけで設定どおりの索引データベースが "/var/www/namazudata/db/" 以下に作成されるようになります。

さて、 Namazu の索引 データベース はWeb コンテンツ の内容が変わらなければ作り直す必要はありません。

従って makenamazu_def.bash は、Webコンテンツの内容が書き換えられたときにだけ実行すれば良いことになります。

例えばこの「お便利サーバー.com」のように、コンテンツの更新が数日〜一週間に一度であれば、 FTPクライアント からコンテンツデータを アップロード した後にだけ SSHクライアント ログイン し、 "makenamazu_def.bash" を実行すれば良いだけですので、面倒ということはないはずです。

しかしながら、日ごと夜ごとにページ内容を更新するようなコンテンツでは、いちいちSSHからログインしてコマンドを実行するのは面倒ですから、 crond を利用して定期的に実行させておくと良いかもしれません。

"mknmz" 自身は Perl のスクリプトですので、動作負荷は小さいとはいえません。

ただ、ゼロから索引データベースを作るような作業は別として、更新が行われたいくつかのページの処理を行わせる程度であれば大した負荷にはならないでしょう。

一般的には、1時間に一回程度自動的に実行させておくようにしておけば良いと思います。

nanoエディタで "/etc/crontab" を開き nanoエディタでファイルを開く 、ここで作成したスクリプトを以下のように記述します。

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
30 * * * * root /usr/local/bin/makenamazu_def.bash

"/etc/crontab" を保存したら、忘れずにcrondの再起動を行ってください crondのコントロールについて

これで毎時30分に索引データベースの更新が行われるようになりました。

Namazuの解説書です

とろこがこのように "/etc/crontab" に直接実行スクリプトを記述する方法では、ドキュメントルート以外にも索引データベースの作成が必要になったときに "/etc/crontab" の記述が増え、管理が煩雑になってしまいます。

こういう問題を解消したい場合には、 "run-parts" スクリプト crontabでrun-partsを利用するには を利用した設定を行うと良いでしょう。

このパートでの説明は割愛しますが、要領は Webalizer専用の自動実行ディレクトリを作成する と同じですので参考にしてみてください。

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