全文検索をすることができるnamazu
の導入について解説していきます。ここでは、Webサイト内に「サイト内検索」が設置できるようにしていきます。namazu
は、カスタマイズしずらいともよく言われますが、デザインのカスタマイズの面では、スキンテンプレートが用意されているので非常にやりやすいと思います。また、namazu
はインデックス型の検索エンジンなので、高速な検索が魅力的です。これを機会に是非、自分のサイト内に検索機能を導入しましょう。
|
|
namazu は、namazu本体と、漢字カナ変換プログラムである kakasi が必要となります。予め、ダウンロードしておきましょう。
■Namazu のダウンロード
■kakasi のダウンロード
■kakasi のインストール
namazu をインストールする前に、kakasi が必要となりますので先にインストールしておきましょう。デフォルトでは、/usr/local
以下にインストールされますが、変更したい方は、--prefix をつけて場所指定しておきましょう。
$ cd /usr/local/src/
$ tar xzvf kakasi-2.3.4.tar.gz
$ cd kakasi-2.3.4
$ ./configure
# make && make install |
|
■namazu のインストール
namazu も kakasi 同様、デフォルトでは、/usr/local にインストールされます。namazu
本体をインストールする前に、File-MMagic を先にインストールします。
$ cd /usr/local/src/
$ tar xzvf namazu-2.0.16.tar.gz
$ cd namazu-2.0.16/File-MMagic/
# perl Makefile.PL
# cd ../
# ./configure
# make && make install |
|
インストールされた主なものは以下のPATH にあります。
/usr/local/bin/namazu
/usr/local/bin/mknmz
/usr/local/etc/namazu/namazurc-sample
/usr/local/etc/namazu/mknmzrc-sample
/usr/local/libexec/namazu.cgi |
|
■namazurc の編集
/usr/local/etc/namazu/ 以下に、namazurc-sample があるので、それをコピーして編集していきます。以下は筆者の編集例ですが、より細かくカスタマイズすることもできます。
# cd /usr/local/etc/namazu/
# cp namazurc-sample namazurc
# vi namazurc
Index /usr/local/var/namazu/index
// インデックスが作成される場所です。必ずしもこのPATHである必要はないので新規ディレクトリを作成して指定しても構いません。
Template /usr/local/var/namazu/index
// テンプレートファイルの格納PATHです。このディレクトリ内に格納されているテンプレートが、実際の検索画面のデザインとして表示されます。
Replace /home/www/public_html http://linux.kororo.jp
// 検索対象とするサイトのPATH
と URL を指定しておきます。URL は、デフォルトリンクとなるので、http://192.168.0.2
のようなローカルアドレスを指定してしまうと、外部からは一切アクセスできなくなってしまうので、外部公開用サイトの場合は、FQDN
で指定しておきましょう。
Lang ja_JP.eucJP
// 言語を指定します。デフォルトでは、「ja」と指定されていますが、この場合だと検索された時の検索結果が、完全に日本語表示にならない部分がでてきます。その場合は、「ja_JP.eucJP」と指定する事で完全日本語表示になります。
EmphasisTags "<strong
class=\"keyword\">" "</strong>"
// 検索結果で出力された見出しのタイトルをボールド(太字)にします。
MaxHit 300
// 検索最大HIT数です。サイトによって異なると思いますが、うちのサイトは文献数がそんなに多くはないので、最大HIT数を300ぐらいにしています。デフォルトは10000。 |
|
■mknmzrc の編集
/usr/local/etc/namazu/ 以下に、mknmzrc-sample があるので、それをコピーして編集していきます。mknmzrc
も多くのパラメータがありますが、デフォルトでも全く問題ありません。以下は筆者の編集例です。
# cd /usr/local/etc/namazu/
# cp mknmzrc-sample mknmzrc
# vi mknmzrc
$ADDRESS = '';
// 検索時に表示される電子メールアドレスを指定します。ここでは、空(非表示)に指定。
$DENY_FILE = ".*\\.(gif|png|jpg|jpeg|log|dat|css|cgi|pl)|.*\\.tar\\.gz|core|.*\\.bak|.*~|\\..*|\x23.*";
// 検索対象から除外する拡張子を指定します。
$MAX_FIELD_LENGTH = 400;
// 検索によって出力される最大表示文字数です。デフォルトの200文字ではやや少ないので、ここでは400文字に設定しています。 |
|
■namazu.cgi のコピー
namazu をWebサイトでのサイト内検索に利用する場合、namazu.cgi が必要となります。namazu.cgi
をドキュメントルート以下の CGI を実行できるディレクトリ内(通常は、cgi-bin)にコピーしておきましょう。
# cp /usr/local/libexec/namazu.cgi
/home/www/public_html/cgi-bin/ |
|
■インデックスの作成
最後に、インデックスを作成します。namazu の場合、予めインデックスされたインデックスファイル内を検索することによって、高速な検索を実現しています。つまり、このインデックスを作成しておかないことには検索をかけてもなにも検索されません。なので、なにはともあれ、最初にインデックスを作成しておきましょう。
-Oオプションは「インデックスの出力先を指定する」オプションです。ここでは、
「/home/www/public_html のインデックスを /usr/local/var/namazu/index
以下に作成しなさい」、という意味になります。なお、最後のパイプ後の「nkf -w」は、UTF-8 環境ではこれを付加しないと文字化けしてしまいます。mknmz
のヘルプを見る際にも、「
mknmz --help | nkf -w | more」などのようにコマンドを入力しないと文字化けしますので注意してください。
# /usr/local/bin/mknmz
-O /usr/local/var/namazu/index
/home/www/public_html/ | nkf
-w |
|
※実際には1行で入力してください
実際に、検索を実行する場合は以下のようにコマンドを実行します。ここでは、「apache」という文字を検索しています。なお、細かいオプションについては、ヘルプを参照してください。
# namazu apache |
nkf -w | more
検索結果
参考ヒット数: [ apache: 10 ]
検索式にマッチする 10 個の文書が見つかりました。
1. Apache(httpd.conf)の設定 PART② (スコア:
87)
・・・・・
省略
|
|
■サイト内検索の設置
それでは、最後の締めである、ブラウザ上からの「サイト内検索」の説明に入ります。上記で説明した通りに検索が正常に実行されていれば、サイト内検索も問題なく行えるはずです。まず、テキストエディタを開き、以下のように記述し、search.html
としてドキュメントルート以下に保存し、ブラウザ上からアクセスしてみてください。
<html>
<body bgcolor="#FFFFFF" text="#000000">
<form method="get" action="cgi-bin/namazu.cgi">
<input type="text" name="query"
size="15" maxlength="50">
<input type="submit" name="submit"
value="検索">
</form>
</body>
</html> |
|
以下のように表示されたら、適当に検索してみてください。
以下のような検索結果が出力されます。以上で、サイト内検索は完了です。
■テンプレートのカスタマイズ
サイトを実際にWeb上で公開する場合、上記のような味気ない検索画面ではなにかが物足りないですね。その場合は、用意されたテンプレートファイルを編集することで、かっこいい検索画面にすることも可能です。但し、かっこいいデザインにするにはある程度のHTML知識が必要となってきます。スキン形式のテンプレートの編集に慣れていない方は最初は手間どるかもしれませんが、慣れると簡単なので是非試してみましょう。
テンプレートは、/usr/local/share/namazu/template以下に用意されているので、元ファイルをコピー後、それを自由に編集していきましょう。なお、.ja
のついた拡張子が日本語用のテンプレートです。
$ cd /usr/local/share/namazu/template/
$ ls -l *.ja
-rw-r--r-- 1 root root 4687 3月 20 04:35
NMZ.body.ja
-rw-r--r-- 1 root root 289 3月 20 04:35 NMZ.foot.ja
-rw-r--r-- 1 root root 2658 3月 20 04:35
NMZ.head.ja
-rw-r--r-- 1 root root 284 3月 20 04:35 NMZ.result.normal.ja
-rw-r--r-- 1 root root 164 3月 20 04:35 NMZ.result.short.ja
-rw-r--r-- 1 root root 2415 3月 20 04:35
NMZ.tips.ja |
|
■cron によるインデックスファイルの定期更新
サイトコンテンツを更新するたびに、手動でインデックスファイルを更新させるのは芸がないので、1日に1回、定期的にインデックスファイルを更新するようにcron
に登録しておきます。サイトの更新頻度に合わせて各自適切な間隔で設定してください。
まず、以下のような簡易なシェルスクリプトを作成します。--exclude オプションは、インデックス除外対象にしたいPATHを指定しておきます。
# cd /usr/local/bin
# touch namazu.sh
# vi namazu.sh
#!/bin/sh
PATH=/usr/bin:/usr/local/bin
HOME=/home/www/public_html
INDEX=/home/www/index/
EXCLUDE_PATH="$HOME/cgi-bin/.*|$HOME/css/.*|$HOME/js/.*"
mknmz --exclude=$EXCLUDE_PATH -O $INDEX
$HOME | nkf -w
# chmod +x namazu.sh
|
|
crontab に登録します。1日1回、2時30分に実行されるようにしておきます。
# vi /etc/crontab
# namazu index ---------------------------------------------
03 2 * * * root /usr/local/bin/k-namazu.sh
> /dev/null |
|