運営しているサイトが大規模になってくればくるほど
必要な情報がどこにあるかわからなくなってしまいます。
そういうときに検索機能があればと思うことがあるでしょう。
その検索機能を実現してくれるのがnamazuの全文検索システムです。
ようはyahooのような検索サイトを社内だけで使おうというようなものだと思ってください。

インストールの説明をする前に何ですが、ここを見れば確実にインストールの
意味もわかりますし、必要なファイルや編集する内容も詳しく説明されています。

【準備】
※namazuをインストールするにはnamazuの他にも必要なものがいくつかあります。
・perl5.004以上
・GNU gettext
・perlモジュール File::MMagic
・nkf
・KAKASI or ChaSen(perlモジュール Text::Kakasi or Text::Chasenでも可能)
●perl
http://sunsite.sut.ac.jp/pub/sun-info/Solaris/sparc/
から最新版をダウンロード
今回の場合はperl-5.6.1が最新版
# perl -v
でperl5.004以上であればバージョンアップしなくてもよい
perl5.004より前のバージョンであればバージョンアップします

# pkginfo |grep perl
でパッケージ名を調べて
※solarisの場合ですRedHat系Linuxの場合はrpm -qa|grep -i prelで調べます
# pkgrm パッケージ名
でアンインストールした後に以下のインストール手順でインストールする

●gettext(Linuxで構築する場合は必要なしというか最初から入ってる)
http://sunsite.sut.ac.jp/pub/sun-info/Solaris/sparc/
最新版をダウンロード
今回はgettext-0.10.37最新版

●nkf
ftp://ftp.ie.u-ryukyu.ac.jp/pub/software/kono/
からダウンロード
最新版は1.92になるが全角空白に対するバグがあるので1.71を使うか1.92に
パッチを当てます。
http://www.namazu.org/ml/namazu-users-ja/msg01298.html
に1.92と1.71のパッチがRei FURUKAWA<furukawa@tcp-ip.or.jp>さんが公開しているので
適用すると1.92の全角空白のバグが修正されます。

※patchコマンドのGNU版が入っていない場合は
http://sunsite.sut.ac.jp/pub/sun-info/Solaris/sparc/
からダウンロードしていれておきましょう、おそらく後々便利です。。
標準のpatchコマンドではなくGNU版を前提に作られているので。

今回は安全に1.71を使うことにします。
1.92のパッチはちょっとこわいですので・・・


●kakasi
http://kakasi.namazu.org/stable/
最新版をダウンロード
今回はkakasi-2.3.4.tar.gz
※kakasiのperlモジュール
http://www.daionet.gr.jp/~knok/kakasi/
最新版をダウンロード
Text-Kakasi-1.01.tar.gz

●File::MMagic
http://search.cpan.org/
から最新版をダウンロード
※namazuのソースにも含まれていますが今回は最新版をインストールします。
ソースはCPANからダウンロード

●namazu
http://www.namazu.org/stable/
最新の安定版をダウンロード
今回はnamazu-2.0.7.tar.gzが最新版
#と思っていたら2001.11.30に2.09がリリースされました。
でもやり方は同じです。


【インストール】
●perl5.6.1
# perl -v
でバージョンを確認。今回はどうせなら最新版にしてしまおうということで
もとのpwerl5.003を削除します。
パッケージでインストールされていたので

# pkginfo |grep perl(SUNWpl)
LWperl( or SUNWpl・・・)
# pkgrm LWperl
古いパッケージを削除し、新しいものをパッケージでインストールします。
# cd /usr/local/arch/perl-5.6.1-sol26-sparc-local.gz /tmp
# cd /tmp
# gzip -d perl-5.6.1-sol26-sparc-local.gz
# pkgadd -d perl-5.6.1-sol26-sparc-local

●gettext
# cp /usr/local/arch/gettext-0.10.37-sol26-sparc-local.gz /tmp
# cd /tmp
# gzip -d gettext-0.10.37-sol26-sparc-local.gz
# pkgadd -d gettext-0.10.37-sol26-sparc-local


●nkf1.71
# mkdir /usr/local/src/nkf171
# cp /usr/local/arch/nkf171.shar /usr/local/src/nkf171/
# cd /usr/local/src/nkf171/
# sh nkf171.shar
# make CC=gcc
# cp nkf /usr/local/bin/
# cp nkf.1 /usr/local/man/man1/
※perlモジュールも入れてみます。
# cd /usr/local/src/nkf171/NKF/
# perl Makefile.PL 2>&1 | tee perl_make.log
# make 2>&1|tee make.log
# make install 2>&1|tee make_install.log

●kakasi
# cp /usr/local/arch/kakasi-2.3.4.tar.gz /usr/local/src/
# cd /usr/local/src
# gzip -d < kakasi-2.3.4.tar.gz |tar xf -
# ./configure 2>&1 | tee configure.log
# make 2>&1|tee make.log
# make check 2>&1 | tee make_check.log
# make install 2>&1|tee make_install.log

※perlモジュールも入れてみます
# gzip -d < Text-Kakasi-1.04.tar.gz |tar xf -
# cd Text-Kakasi-1.04
# perl Makefile.PL 2>&1|tee perl-makefile.log
# make 2>&1|tee make.log
# make install 2>&1|tee make_install.log

●File::MMagic
# cp /usr/local/arch/File-MMagic-1.13.tar.gz /usr/local/src/
# cd /usr/local/src/
# gzip -d < File-MMagic-1.13.tar.gz |tar xf -
# cd File-MMagic-1.13
# perl Makefile.PL 2>&1 | tee perl_makefile.log
# make 2>&1|tee make.log
# make install 2>&1|tee make_insall.log

●namazu
# cp /usr/local/arch/namazu-2.0.7.tar.gz /usr/local/src/
# cd /usr/local/src/
# gzip -d < namazu-2.0.7.tar.gz |tar xf -
# cd namazu-2.0.7
# ./configure --with-included-gettext 2>&1 | tee configure.log
# make 2>&1|tee make.log
# make install 2>&1|tee make_install.log
#

【設定】
○必要な情報
索引ファイルを置くディレクトリ
/www/namazu/index
namazu.cgiを置くディレクトリ
/www/cgi-bin/

●httpd.confの設定
# vi /www/conf/httpd.conf
ScriptAlias /cgi-bin/ "/www/cgi-bin/"
<Directory "/www/cgi-bin">
AddHandler cgi-script .cgi
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
DirectoryIndex index.html index.htm
</Directory>
のような設定を追記。用は.cgiをcgiとして使えるようにしています。

●namazu.cgiのコピー
# cp -p /usr/local/libexec/namazu.cgi /www/cgi-bin/
# chown www:www /www/cgi-bin/namazu.cgi
# ls -l /www/cgi-bin/namazu.cgi
-rwxr-xr-x 1 www www 206143 Nov 15 16:37 /www/cgi-bin/namazu.cgi

●テンプレートファイルのコピー
# mkdir -p /www/namazu/index
# cp /usr/local/share/namazu/template/NMZ.*.ja /www/namazu/index/

※必要に応じて*.jaのファイルを編集して検索画面をカスタマイズします。


●設定ファイルの編集
mknmzrcはmknmzを実行する際に参照される
namazurcはnamazuが実行される際に参照される

# vi /usr/local/etc/namazu/mknmzrc
package conf; # Don't remove this line!
$ADDRESS = 'nitta@aroman.mine.nu';
$HTML_SUFFIX = "html?|[ps]html|html\\.[a-z]{2}";
$ALLOW_FILE = ".*\\.(?:$HTML_SUFFIX)|.*\\.txt" . # HTML, plain text
"|.*\\.gz|.*\\.Z|.*\\.bz2" . # Compressed files
"|.*\\.pdf|.*\\.ps" . # PDF, PostScript
"|.*\\.doc|.*\\.xls|.*\\.ppt" . # Word, Excel, PowerPoint
"|.*\\.j[sabf]w|.*\\.jtd" . # Ichitaro 4, 5, 6, 7, 8
"|\\d+|[-\\w]+\\.[1-9n]"; # Mail/News, man
$DENY_FILE = ".*\\.(gif|png|jpg|jpeg)|.*\\.tar\\.gz|core|.*\\.bak|.*~|\\..*|\x23.*";
$EXCLUDE_PATH = undef;
$REMAIN_HEADER = "From|Date|Message-ID";
$SEARCH_FIELD = "message-id|subject|from|date|uri|newsgroups|to|summary|size";
$META_TAGS = "keywords|description";
%FIELD_ALIASES = ('title' => 'subject', 'author' => 'from');
$NON_SEPARATION_ELEMENTS = 'A|TT|CODE|SAMP|KBD|VAR|B|STRONG|I|EM|CITE|FONT|U|'.
'STRIKE|BIG|SMALL|DFN|ABBR|ACRONYM|Q|SUB|SUP|SPAN|BDO';
$ON_MEMORY_MAX = 5000000;
$FILE_SIZE_MAX = 2000000;
$TEXT_SIZE_MAX = 600000;
$WORD_LENG_MAX = 128;
%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 <meta name="keywords" content="foo bar">
'headers' => 8, # for Mail/News' headers
);
$INVALID_LENG = 128;
$MAX_FIELD_LENGTH = 200;
$NKF = "module_nkf";
$KAKASI = "module_kakasi -ieuc -oeuc -w";
$WAKATI = $KAKASI;

メモリの上限などはデフォルト値にしておいて、後々チューニングしましょう。
一度デフォルトでindexを作成してすこしずつチューニングするのが理想でしょう。

# vi /usr/local/etc/namazu/namazurc
Index /www/namazu/index
Template /www/namazu/index
Replace /www/htdocs/ http://131.248.155.190/
Replace /export/home/(.*)/public_html/ http://131.248.155.190/~\1/
Replace /export/home/*/public_html/ http://131.248.155.190/~*/
Replace /www/users/*/ http://131.248.155.190/*/
Logging on
Lang ja
EmphasisTags "<strong class=\"keyword\">" "</strong>"
MaxHit 10000
MaxMatch 1000
以上でnamazu自体は動作するようになると思いますが
まだ、検索対象のファイルのインデックスを作成する作業があります。
以下でindexの作成作業を行います。

●インデックスの作成
# LANG=ja export LANG
# /usr/local/bin/mknmz -O /www/namazu/index /www/htdocs /export/home/*/public_html
※mknmz -O [indexの作成] [検索対象ディレクトリ1 検索対象ディレクトリ2 ・・・]

最新のコンテンツを検索させるには毎日定期的にこのコマンドを実行する必要があります。
よってcronにて自動で実行するようにします。
/usr/local/bin/mkindex.sh
というシェルを作成しそれをcronに登録します。

#vi /usr/local/bin/mkindex.sh
#!/bin/sh
LANG=ja export LANG
/usr/local/bin/mknmz -O /www/namazu/index /www/htdocs /export/home/*/public_html
↓cronへの登録
# EDITOR=vi export EDITOR
# crontab -e
0 2 * * * /usr/local/bin/mkindex.sh > /dev/null 2>&1
(毎日夜中の2時にindexの作成がされるようにします)
以上でnamazuのインストールは完了。


参考までに検索画面のカスタマイズは以下のようにしています。
   見た目をカスタマイズするには以下のファイルを編集することで可能です。
 ※すごくシンプルをモットウにちょっとパロディで作ってみました・・・
/www/namazu/index/NMZ.body.ja
/www/namazu/index/NMZ.head.ja
/www/namazu/index/NMZ.result.short.ja
/www/namazu/index/NMZ.foot.ja
/www/namazu/index/NMZ.result.normal.ja
/www/namazu/index/NMZ.tips.ja

/www/namazu/index/NMZ.body.ja
空白

/www/namazu/index/NMZ.foot.ja
<p>
<center>ブラウザからMoogle検索! 近日公開!<p>
<a href="http://www.24alpen.com/">アルペン</a> - <a href="http://www.himaraya.co.jp/">HIMAR
AYA</a> - <a href="http://www.victoria.co.jp/">Victoria</a>
</p>
<address>
<!-- ADDRESS -->
<a href="mailto:nitta@aroman.mine.nu">nitta@aroman.mine.nu</a>
<!-- ADDRESS -->
</address>
</body>
</html>

/www/namazu/index/NMZ.head.ja
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<!-- LINK-REV-MADE -->
<link rev=made href="mailto:yuzo@jinjin.org">
<!-- LINK-REV-MADE -->
<title>Moogle</title>
<style type="text/css"><!--
strong.keyword { color: Red; }
p.example { text-indent: 1em;
color: Navy;
font-weight: bold;
font-family: monospace; }
code { color: Navy;
font-family: monospace; }
code.example { color: Navy;
font-weight: bold;
font-family: monospace; }
code.operator { color: Navy;
font-family: monospace;
font-weight: bold; }
--></style>
</head>
<body bgcolor=white lang="ja">
<!--<h1>Moogle</h1>-->
<center>
<IMG SRC="/~nitta/moogle.jpg">
</center>
<form method="get" action="{cgi}">
<p>
<strong></strong>
<center>
<input type="text" name="query" size="40">
<a href="{cgi}"><font size=2>検索オプション</font></a><br>
<input type="submit" value="Moogle 検索">
<input type="hidden" name="whence" value="0">
<!-- <input type="hidden" name="idxname" value="foobar"> -->
<p>
<strong>表示件数:</strong>
<select name="max">
<option value="10">10
<option value="20">20
<option selected value="30">30
<option value="50">50
<option value="100">100
</select>
<strong>表示形式:</strong>
<select name="result">
<option selected value="normal">標準
<option value="short">簡潔
</select>
<strong>ソート:</strong>
<select name="sort">
<option selected value="score">スコア
<option value="date:late">日付 (新しい順)
<option value="date:early">日付 (古い順)
<option value="field:subject:ascending">題名 (昇順)
<option value="field:subject:descending">題名 (降順)
<option value="field:from:ascending">著者 (昇順)
<option value="field:from:descending">著者 (降順)
<option value="field:size:ascending">サイズ (昇順)
<option value="field:size:descending">サイズ (降順)
<option value="field:uri:ascending">URI (昇順)
<option value="field:uri:descending">URI (降順)
</select>
</p>
<font size=1>(c)2001 Moogle - <!-- FILE --> <!-- FILE -->ウェブページから検索
</font>
</center>
<!--
<p>
<strong>検索対象:</strong>
<ul>
<li><input type="checkbox" name="idxname" value="foo" checked>foo
<li><input type="checkbox" name="idxname" value="bar">bar
<li><input type="checkbox" name="idxname" value="baz">baz
</ul>
</p>
</form>
-->

/www/namazu/index/NMZ.result.normal.ja
<dt><!--${namazu::counter}.--> <strong><a href="${uri}">${title}</a></strong> <!--(スコア:
${namazu::score})-->
<!--<dd><strong>著者</strong>: <em>${author}</em>-->
<dd><strong>日付</strong>: <em>${date}</em>
<dd>${summary}
<dd><a href="${uri}">${uri}</a> (${size} bytes)<br><br>

/www/namazu/index/NMZ.result.short.ja
<dt><!--${namazu::counter}.--> <strong><a href="${uri}">${title}</a></strong><!-- (スコア:
${namazu::score})-->
<dd><a href="${uri}">${uri}</a> (${size} bytes)<br><br>

/www/namazu/index/NMZ.tips.ja
<h2><a name="tips">検索がうまくいかない時は他のキーワードで検索して下しあ</a></h2>

以上でインストールは終了ですので実際にアクセスしてためします。
今回作成した場合ものはhttp://ホスト名/cgi-bin/namazu.cgiでアクセスできるようにしているので
実際にアクセスしてみるとこんな感じです。

実際に検索して表示されることを確認してください。

M$ Officeのファイル(excel,word,powerpoint)など検索したいことも
多々あると思います。
そう言ったようにhtmlやtxt以外に検索したいときは
http://www.namazu.org/doc/manual.html.ja#doc-filter
にあるようなフィルターを入れてください。
そうすれば思ったとおりの検索結果が得られると思います。
全文検索システム(namazu)インストール