初出:技術評論社刊『WEB+DB PRESS Vol.16』
※本HTMLは原稿を元に作成しているため、紙面と一部内容が異なることがあります。ご了承ください。

第2章:Namazuで検索システム構築

はじめに
[予備知識] [下準備と構築上のポイント]
インストールと設定
[Namazuに必要なソフト] [Linux環境でのインストール] [Windows環境でのインストール] [試してみよう] [トラブルシューティング]
Webサーバとの連携
[作業内容] [Apacheの設定] [IISの設定] [初期設定と動作の確認]
チューンナップ
[検索結果のURL(Replace)] [複数のインデックスを使う] [テキスト形式以外のファイル] [辞書のメンテナンス]
おわりに
コラム
[インデックスの意義] [KAKASIとChaSen] [バイナリパッケージの利用] [Windows版Apache] [httpによる参照] [複数ディレクトリのインデックス]

はじめに

予備知識

Namazuは純国産の全文検索エンジンです.Webの検索サイトでおなじみのフリーキーワードによる“検索環境”を手軽に構築することができます.

Webサイトでおなじみ……といってもNamazuで検索できるのはWebコンテンツだけではありません.Webで公開していない社内文書でも,HTMLではない文書でも,およそ大抵の文書を扱うことができます.

●動作環境

NamazuはUNIX系OSおよびWindows環境で動作します.また,インデックスの作成時にPerlを使用します.

●検索できるファイル

原則としてテキストファイルが対象となります.他形式,たとえばWordのファイルやPDFのファイルなどはフィルタープログラムを使うことで対応します.

主な対応ファイル
Office関連OpenOffice.org, Microsoft Office(Excel, Word, PowerPoint), 一太郎(4,5〜13)
TeX/PS/PDF関連TeX, dvi, PostScript, PDF
圧縮ファイルgzip, bzip2, compress
パッケージdeb, rpm
その他HTML, ハイパー日記システム(hnf), HDML, Mail/News, mhonarc, man, RFC, RTF

http://www.namazu.org/doc/manual.html.ja#doc-filterより

●Namazuの構成

Namazuはインデックスを作成するmknmz,検索を行うnamazuおよびnamazu.cgiから構成されています.mknmzはPerlで,namazuおよびnamazu.cgiはCで書かれています.

このほか,日本語による文書を解析するのに,KakasiまたはChasenというツールを利用します.詳しくはインストールの項を参照してください.

●Namazuのバージョン

現在,安定版(2.0.x)と開発版(2.1.x)で開発が進められています.本稿では最新の安定版であるバージョン2.0.12を使用します(2003年7月現在;最新版はhttp://www.namazu.org/で確認できます).

なお,バージョン2.xからはNamazu Projectによる共同開発が行われています.Namazu Projectには,オリジナルの作者である高林 哲氏も参加しています.

下準備と構築上のポイント

Namazuでは,検索をするにあたりあらかじめインデックスを作成する必要があります.インデックスの作成は,ローカル環境にあるファイルを対象に,原則としてディレクトリ単位で行います.

したがって,検索したい文書を,mknmz実行環境にディレクトリ単位でまとめておくことで,検索しやすいシステムを構築できます.

●対象ファイルの集約

mknmzでインデックスを作成できるのはローカル環境にあるファイルに限られています.社内文書のように,もともとローカル環境にあるファイルの場合は問題ありませんが,インターネット環境に公開されているファイルを対象としたい場合は,いったんローカル環境にコピーする必要があります.

なお,

ことから,かならずしも1台のマシンに全文書を集結させる必要はありません.“文書は分散管理して検索サーバーは1台で”という運用も可能です.

●ディレクトリの構成

mknmzでは,インデックスを作成する際にディレクトリを指定します.指定したディレクトリ下にあるファイルは,サブディレクトリも含めてすべてインデックス作成の対象となります.

mknmz実行時のオプションで,対象とするファイルを限定することも可能ですが,できれば同じテーマを1つのディレクトリ内にまとめておく方が管理しやすいでしょう.

なお,namazuは複数のインデックスを使った検索も可能です.したがって,インデックスはある程度分割しておくいた方が,使い勝手がより良くなります.

|_ document
       |_ theme01       ←このディレクトリで
            |_ sub01      インデックスを作成
            |_ sub02
       |_ theme02       ←同上
       |_ theme03       ←同上

●ファイルの配置

イントラネットやインターネットで接続したコンピュータでも検索結果を表示したい場合は,文書ファイルを公開エリアに置くことになります.

文書ファイルへのアクセス制限は,Namazu側ではなく,ファイルサーバーやWebサーバーで行います.したがって,サーバーの設定によっては,特定ユーザーにのみ閲覧を許可したり,パスワード認証を行ったりといった制御が可能です.ただし,ファイルにアクセス制限がかかっていても,検索結果には要約が表示される点に留意してください.

コラム:インデックスの意義

Namazuは,事前に作成したインデックスを元に検索を行います.

インデックスの意義として第一にあげられるのが検索の高速化です.検索のたびに全てのファイルをチェックするのは,ファイルが少なければともかく,ファイルが多く,ましてや複数のディレクトリにわたっているような場合,現実的な方法とは言えません.

もう1つの効果に,単語認識率の向上が挙げられます,

たとえば,文中の改行について考えてみましょう.日本語は,単語の途中で改行することができます.しかし,「日[改行]本」と書かれているファイルがあっても,そのままでは“日本”という単語で検索したときにヒットしません.日本語中の改行および改行前後の空白を取り除く,といった処置が必要です.

インデックス作成時にこういった処置を施しておくことで,検索の精度を上げることができます.

逆に適切なインデックスが作れないと,“ファイルに含まれているのにヒットしない”ということになります.いかに適切なインデックスを作るかが,全文検索システムを構築する上でのキーとなるでしょう.

インストールと設定

Namazuに必要なソフト

インデックスを作成するにはPerlが,日本語を処理するにはnkfおよびKAKASIまたはChaSenが必要です.また,ファイル形式の判定に,File::MMagic(Perl用モジュール)を使用します.

●nkf

Namazuでは,日本語による文書のインデックスを生成するのに,nkf(ネットワーク用漢字コード変換フィルタ)を使用します.nkfはISO-2022-JPとシフトJIS,EUC-JPによるファイルを相互に変換することができます.

Windows環境の場合,Namazuのパッケージに収録されているPerlのモジュール(NKF.ppd)を使用します.

Linux環境の場合,日本語に対応しているディストリビューションであればほとんどの場合インストールされているはずですが,バージョンに注意する必要があります.

nkf1.9にはいわゆる全角スペースの処理に問題があり,インデックスがうまく作成できない・検索結果が文字化けするなどの現象が起こります.1.7*であれば大丈夫なのでダウングレードするか,修正用のパッチを適用すると良いでしょう.修正用パッチはNamazuのメーリングリスト(namazu-users-ja#01299)で公開されています.

なお,mknmzはnkfのPerlモジュールにも対応しています.したがって,nkfコマンドは1.9のままで,Perlモジュール(perl-NKF)を1.7*にすることでも対処できます.

Red Hat系システムでの確認例
$ rpm -qa | grep -i nkf
perl-NKF-1.71-7	←★1.71のPerlモジュールがインストールされているのでOK
nkf-1.92-11

●KAKASI

Namazuでは.KAKASIまたはChaSen(茶筌)というツールをつかって,日本語を“分かち書き”にしてインデックスを生成します.

おおむね,KAKASIの方が処理が高速でメンテナンスが容易,ChaSenは高度な日本語処理が可能なので精度の高いインデックスが作成できます.本稿では利用実績の多いKAKASIを使用します.

KAKASIやChaSenは,分かち書きを行うにあたって専用の“辞書”を使用しています.専門用語など,標準の辞書にない単語を辞書に追加することで,より精度の高いインデックスが生成できます.KAKASI辞書への単語登録は,チューンナップの項で扱います.

コラム:KAKASIとChaSen

KAKASI(KAnji KAna Simple Inverter)は漢字かなまじり文をひらがな文やローマ字文に変換するためのプログラムで,高橋裕信氏によって開発されました.SKK(simple kanakanji converter)という漢字入力システムの辞書を基に開発されており,KAKASIという名前はSKKを逆から読んだものでもあるとのことです(README-jaより).現在は,Namazuに最適化されたKAKASI 2.3.*が,KAKASI Project(http://kakasi.namazu.org/)によって公開・配布されています。

ChaSen(茶筌)は奈良先端科学技術大学院大学自然言語処理学講座による形態素解析システムです(http://chasen.aist-nara.ac.jp/).形態素(morpheme)とは意味を有する最小の言語単位のことで,ChaSenは文章の形態素解析を行い,形態素単位での品詞情報の抽出ができます。

なお,ChaSenを使いたい場合は,野首貴嗣氏によるText::ChaSenモジュール(http://www.daionet.gr.jp/~knok/chasen/)の利用をお奨めします.処理が高速化されます.

●File::MMagic

File::MMagicは,ファイルの種類を判定するPerlモジュールです.

Windows環境の場合,Namazuのパッケージに収録されているFile-MMagic.ppdを使用します.

Linux環境の場合,各ディストリビューション用のパッケージでインストールするか,Namazuのソースアーカイブ内のものを利用します.

Linux環境でのインストール

VineやPlamo,Debianなど,Namazuパッケージがあるディストリビューションならば専用パッケージを使うのが簡単かつ安全です.特にDebianやVineの場合は,aptコマンドで必要なパッケージをまとめてインストールできます.

# apt-get update
# apt-get install namazu

●ソースからのインストール

バイナリパッケージがインストールできない場合や,最新版がない場合は,ソースから構築してインストールします.インストールの手順は以下の通りです.

namazuコマンドおよびmknmzコマンドは/usr/local/bin/に,namazu.cgiコマンドは/usr/local/libexec/にインストールされます.

入手先
Namazu	http://www.namazu.org/
KAKASI	http://kakasi.namazu.org/
(1)KAKASIの構築とインストール
ソースアーカイブを展開して展開されたディレクトリへ移動
$ tar -xzf kakasi-2.3.4.tar.gz
$ cd kakasi-2.3.4
$ ./configure
$ make
スーパーユーザーになりインストールを実行,一般ユーザーに戻る
$ su
# make install
# exit
(2)+(3)File-MMagicモジュールおよびNamazuの構築とインストール
ソースアーカイブを展開して展開されたディレクトリへ移動
$ tar -xzf namazu-2.0.12.tar.gz
$ cd namazu-2.0.12
(2)File-MMagicのインストール
File-MMagicディレクトリへ移動しMakefile.PLおよびmakeを実行
$ cd File-MMagic
$ perl Makefile.PL
$ make
スーパーユーザーになりインストールを実行,一般ユーザーに戻る
$ su
# make install
# exit
(2)+(3)File-MMagicモジュールおよびNamazuの構築とインストール
(続き)
namazu-2.0.12ディレクトリに戻り,configureを実行
$ cd ..
$ ./configure
スーパーユーザーになりインストールを実行,一般ユーザーに戻る
$ su
# make install
# exit

(manのディレクトリを指定する場合,--man=/usr/share/man/jaオプションを付けて実行.システムが使用しているmanのディレクトリはmanpathコマンドで確認できる)

(Solaris環境の場合,--with-included-gettextオプションを付けて実行)

コラム:バイナリパッケージの利用

NamazuのWebサイト(http://www.namazu.org/)では,ソースパッケージの他にRPM/SRPMパッケージとdebパッケージが公開されています.

●RPMパッケージ

まずPerlのMMagicモジュールをインストールした後,KAKASI関連およびNamazu関連のパッケージをインストールします.

# rpm -ivh perl-File-MMagic*
# rpm -ivh kakasi* *Kakasi*
# rpm -ivh namazu* *Namazu*

●debパッケージ

/etc/apt/sources.listにnamazu.orgを参照する設定を追加し,apt-get updateおよびapt-get installを実行します.

設定例:/etc/apt/sources.list
# httpを使用する場合
deb http://www.namazu.org/debian woody main
# ftpを使用する場合
deb ftp://ftp.namazu.org/namazu/debian woody main

http://www.namazu.org/debian/sources.listより

Windows環境でのインストール

まず,ActivePerlをインストールし,KAKASAIおよびNamazuをインストールします.

ActivePerlの最新版は5.8ですが,Namazu 2.0.12をインストールするには5.6.*が必要です.これは,Namazu 2.0.12に収録されているモジュールが5.6用のためです

5.8用のモジュールについてはNamazuのメーリングリスト(namazu-win32-users#01529, #01759)を参照

(1)ActivePerlのインストール

ActivePerl-5.6.1.635-MSWin32-x86.msiを実行し,画面にしたがってインストールします.

Windows 95/98/Me環境の場合,PerlのPATHを有効にするためにここで再起動する必要があります.

(2)KAKASIのインストール

kakasi-2.3.4.zipを展開するとできるkakasiフォルダを,C:\にコピーします.

(3)Namazuのインストール

nmz2012.exeを実行します.最初に“解凍先フォルダ名”の問い合わせがあるので,C:\のまま変更せずに[解凍]をクリックします(画面1).

続いて,コマンドプロンプトが表示されるので,Enterで処理を続行します(画面2).

←解凍先はC:\のまま[解凍]をクリック

←Enterで処理を続行

試してみよう

試しに,適当なディレクトリにある文書ファイルのインデックスを作成してみましょう.作業手順は以下の通りです.

検索対象とするディレクトリは,“文書のみのディレクトリ”でなくてもかまいません.mknmzが自動で判定し,対象外のファイルは除外されます.

以下の例では,Namazuのソースアーカイブにある文書を対象としています.

(1)テスト用のインデックスディレクトリを作成
Windows環境
>md namazuindex
Linux環境
$ mkdir namazuindex
(2)mknmzでインデックスを作成

「mknmz -O インデックスDIR 対象DIR」で対象DIRのファイルのインデックスを生成します.なお,-Oオプションを省略した場合はカレントディレクトリに生成されます.

Windows環境
>c:\namazu\bin\mknmz -O namazuindex c:\namazu
Linux環境
$ mknmz -O namazuindex namazu-2.0.12

※ファイル名に日本語や空白が使われていると,検索結果がうまく表示できないことがあります.この場合は,-Uオプションを併用します.-Uはファイル名をエンコードしないというオプションです.

(3)namazuで検索

「namazu 検索キーワード インデックスDIR」で検索します.

Windows環境
>namazu tutorial namazuindex
Linux環境
$ namazu tutorial namazuindex

トラブルシューティング

●検索結果が文字化けしているときは

nkfの1.9を使用している可能性があります.

前述の通り,nkfの1.9にはいわゆる全角スペースの扱いに問題があります.1.9にパッチをあてるか,1.7*にダウングレードすると良いでしょう.

mknmzが使用しているnkfは,mknmz -Cで確認できます.

$ mknmz -C
システム: linux
Namazu: 2.0.12
Perl: 5.008
NKF: module_nkf	←★ココ
KAKASI: module_kakasi -ieuc -oeuc -w
…

※nkfコマンドの場合は/usr/bin/nkfのように表示されるので,「/usr/bin/nkf -v」でバージョンを確認

●日本語の単語がうまく検索できないときは

環境変数LANGが日本語(ja)以外になっていると,日本語用の処理がされず分かち書きが行われません.インデックスをいったん削除し,mknmzを「--indexing-lang=ja」オプション付きで実行すると,常に日本語用の処理が行われるようになります.

また,nkfコマンドやKAKASIまたはChaSenがインストールされているかも併せて確認してください.

分かち書きが行われているかどうかは,単語ファイル(NMZ.w)で確認できます.このファイルに日本語の文章がそのまま登録されている場合,分かち書きができていません.

←分かち書きできていない(日本語用の処理が行われていない)

←分かち書きできている

Webサーバとの連携

作業内容

Namazuはコマンドラインからも検索できるし,他のインターフェースからも利用できます.しかしなんといっても便利なのはWebブラウザからの検索です.namazu.cgiをつかって,WebサーバとNamazuを連携できるようにしましょう.

まず,WebサーバーでCGIを実行可能にし,namazu.cgiおよび設定ファイル(.namazurc)をCGI用のディレクトリにコピーします.続いて,設定ファイルでインデックスディレクトリのパスなどを設定します.

なお,ここではNamazu関連の設定のみを扱いますが,このほか,見つけたファイルをWebブラウザ経由で表示するためのWebサーバの設定も必要です.

Apacheの設定

(1)ApacheでCGIを使用可能にし,(2)namazu.cgiをCGIプログラム用のディレクトリにコピーします.

なお,Apacheのインストールおよび基本的な設定は済んでいるものとし,ここではCGI用の設定だけ扱います.

(1)Apacheの設定

httpd.confで以下の行が有効になっているか確認し,なければ追加します.httpd.confを変更したらばApache(httpd)を再起動します.

拡張子が.cgiのプログラムをCGIスクリプトとする
AddHandler cgi-script .cgi
/usr/local/apache/cgi-bin/ディレクトリをスクリプト用のディレクトリとして,
cgi-binでアクセスできるようにする
ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"
(2)namazu.cgiのコピー

namazu.cgiを,(1)のScriptAliasで設定したディレクトリにコピーします.

ソースアーカイブを利用した場合,namazu.cgiは/usr/local/libexec/にインストールされています.バイナリパッケージの場合,namazu-cgi-*.rpmのように,CGIが別パッケージになっているので,必要に応じインストールします.

(3)設定ファイルの作成

設定ファイル(.namazurc)を,namazu.cgiと同じディレクトリに作成します.

Namazuをソースからインストールした場合,サンプルファイル(/usr/local/etc/namazurc-sample)があるので,「.namazurc」という名前でコピーすると良いでしょう.

バイナリパッケージを使用した場合は,namazurcやnamazurc-sampleというファイルを探してコピーするのが簡単です.

# cp /usr/local/etc/namazurc-sample/usr/local/apache/cgi-bin/.namazurc

IISの設定

(1)CGI用のディレクトリを作成し,(2)C:\namazu\libexec\namazu.cgi.exeとC:\etc\namazu\namazurcをコピーします.

IISはWindows 2000/XPのProfessional版以上に付属しています.デフォルトではインストールされないので,「アプリケーションの追加と削除」で追加インストールしてください.自動で起動するかどうかは「コントロールパネル」→「管理ツール」→「サービス」で設定できます.

(1)IISの設定

CGI用のディレクトリは「コントロールパネル」→「管理ツール(カテゴリ:パフォーマンスとメンテナンス)」→「インターネット サービス マネージャ」で作成できます.

「規定のWebサイト」を選択して右クリック→「新規作成(N)」→「仮想ディレクトリ(V)」で仮想ディレクトリの作成ウィザードが起動するので,画面に従って作業します.

なお,本稿では,仮想ディレクトリ名(エイリアス)を「cgi-bin」,ディレクトリパスを「C:\Inetpub\Scripts」として解説します.違うディレクトリ名を使っている場合は適宜読み替えてください.

ウィザードが起動

CGIを有効にする

設定内容は,仮想ディレクトリのプロパティで確認・変更できます.

#ローカルパスに対し「←CGIプログラムを置くディレクトリ」 #アプリケーション名に対し「←URLで使用する名前(ApacheのScriptAlias相当)」 #実行アクセス権に対し「←スクリプトおよび実行可能ファイル」になっていることを確認
(2)ファイルのコピー

C:\namazu\libexec\namazu.cgi.exeをCGI用のディレクトリ(C:\Inetpub\Scripts)にコピーします.

続いて,設定ファイルC:\etc\namazu\namazurcを,namazu.cgi.exeと同じディレクトリにコピーして,「.namazurc」という名前に変更します.エクスプローラでは「.」から始まる名前のファイルを作成できないため,コマンドラインでリネームします.リネームした後はエクスプローラからも操作できます.

(CGIのディレクトリで)
>ren namazurc .namazurc	ファイル名を変更

コラム:Windows版Apache

IISが使えない環境でも,Windows版Apacheを利用することでWebサーバ+Namazu環境を構築できます.

Windows版Apacheは,Apacheのダウンロードサイト(http://www.apache.jp/misc/download.html)のbinaries/win32/で入手できます.サイトの注意書きを確認し,“MSI Installer Package”をダウンロードしましょう.

CGIの設定は,(インストールディレクトリ)\conf\httpd.confで行います.また,デフォルトの文字コードをSHIFT_JISに変更しておくと,文字化けを減らすことができます.

AddHandler cgi-script .cgi
	(デフォルトではコメントアウトされているので行頭の#を削除する)
ScriptAlias /cgi-bin/ "C:/Program Files/Apache Group/Apache2/cgi-bin/"
	(cgi-binのパスを確認.このディレクトリにnamazu.cgi.exeをコピーする)

#AddDefaultCharset ISO-8859-1
AddDefaultCharset SHIFT_JIS
	(デフォルトをSHIFT_JISに変更)

Apacheでnamazu.cgiを実行する場合は“http://localhost/cgi-bin/namazu.cgi.exe”のように,“.exe”まで指定する必要があります.namazu.cgi.exeのファイル名をnamazu.cgiに変更すると“http://localhost/cgi-bin/namazu.cgi”で実行できるようになります.

初期設定と動作の確認

(1)インデックスディレクトリを設定し,(2)テスト用のインデックスを作成し,(3)Webブラウザからアクセスしてみましょう.

(1)インデックスディレクトリの設定

ここでは,インデックスおよびテンプレートのディレクトリだけ設定します.この他の設定についてはチューンナップの項で扱います.

テンプレートとは,Namazuが検索結果やエラーメッセージを表示するとき使用するファイルです.

(Windows環境での例)
Index         C:\namazu\var\namazu\index
(Linux環境での例)
Index         /usr/local/var/namazu/index
(2)インデックスの作成

(1)で指定したディレクトリへ移動し,mknmzコマンドを実行します.

>cd C:\namazu\var\namazu\index
>mknmz c:\namazu	←インデックスを作成
(3)Webブラウザから検索

Webブラウザで「http://localhost/cgi-bin/namazu.cgi」を開いてみましょう.

Namazuの検索画面が表示されたら成功です.エラーとなった場合は,CGIが使用可能になっているか,namazu.cgi(namazu.cgi.exe)がコピーされているかを確認してください.

画面に何も表示されない場合は(1)で設定したインデックスディレクトリにNMZ.headというファイルがあるか確認します.NMZ.headはmknmzでインデックスを作成すると生成されるファイルです.

チューンナップ

検索結果のURL(Replace)

WebブラウザからNamazuを実行する場合は,検索結果のURLを“Webブラウザで表示できるURL”にする必要があります.検索結果のURLは,設定ファイル(.namazurc)の「Replace」で変更できます.

たとえば,以下のようにすることで,ローカル環境のファイルをそのまま表示できるようになります.

設定例(namazu.cgiと同じディレクトリにある.namazurc)
Replace / file:///

これではブラウザから表示できない

表示できるようになった

●外部から参照可能にする

file://を使ったURL(file URL)はローカル環境のファイル専用です.外部から参照できるようにするには,http URLを使います.

たとえば,c:\namazu\share\namazu\docディレクトリにあるファイルがhttp://www.example.com/namazudoc/…で表示できる場合は以下のようにします.

設定例(.namazurc)
Replace /c\|/namazu/share/namazu/doc    http://www.example.com/namazudoc
置き換え結果
/c|/namazu/share/namazu/doc/ja/tutorial.html
                      ↓
http://www.example.com/namazudoc/ja/tutorial.html

●Replaceの設定方法

これまで見てきた通り,Replaceは「Replace 置き換え前 置き換え後」で指定します.置き換え文字列の指定には正規表現が使用できます.設定ファイル内のコメントに指定例が書かれているので参考にしてください.

なお,Namazuでは,Windows環境で使われるパス名のうち,“:”は“|”で,“\”は“/”記号で表現しています.設定ファイル内では“|”記号は“\|”と表記します.

設定例
Replace  /home/foo/public_html/   http://www.foobar.jp/~foo/
Replace  /home/(.*)/public_html/  http://www.foobar.jp/\1/
Replace   /C\|/foo/               http://www.foobar.jp/

コラム:httpによる参照

Replaceによって検索結果のパスをhttp://…に変更できても,そもそも検索対象のファイルにWebサーバ経由でアクセスできなくては意味がありません.

Webサーバ経由でアクセスできるようにするには,(a)ドキュメントルート下にファイルを移動する (b)仮想ディレクトリ名を割り当てて公開可能にする などの方法があります.

複数のインデックスを使う

複数のインデックスを使うには,(1)基本インデックス下にサブディレクトリを作り,そこにインデックスを作成する (2)テンプレートファイルでインデックスを選択可能にする という作業を行います.

(1)インデックスを用意する

まず,インデックスを用意します.namazu.cgiを使う場合,基本のインデックスディレクトリ(.namazurcのIndexで指定したディレクトリ)下にサブディレクトリを作り,そこにインデックスを作ります.

たとえば,namazudocディレクトリにc:\namazuのインデックス,kakasidocディレクトリにc:\kakasiのインデックスを作る場合は以下のようにします.

>cd C:\namazu\var\namazu\index
>del NMZ.*	いったん作成済みのインデックスを削除する
>mkdir namazudoc
>mknmz -O namazudoc c:\namazu
>mkdir kakasidoc
>mknmz -O kakasidoc c:\kakasi
(2)テンプレートファイルを用意する

次に,テンプレートファイルを用意します.テンプレートファイルは,Namazuが検索結果やエラーメッセージを表示するのに使うファイルで,基本インデックスディレクトリまたはテンプレートディレクトリ(.namazurcのTemplateで指定)のファイルが読み込まれます.

テンプレートファイルは,C:\namazu\share\namazu\templateまたは/usr/local/share/namazu/templateディレクトリにインストールされているので,コピーして編集します.インデックスを選択可能にするためには,NMZ.head.*ファイルを書き換えます.

>cd C:\namazu\var\namazu\index
	基本インデックスディレクトリまたはテンプレートディレクトリに移動する
>cp C:\namazu\share\namazu\template\*.* .
	テンプレートファイルをコピーする

たとえば,画面nのようにするには,NMZ.head.ja(日本語のテンプレートファイル)を以下のように書き換えます.なお,NMZ.head.jaはEUC(EUC-jp)で書かれています.

サンプル:NMZ.head.ja
<h1>Namazu による全文検索システム</h1>
削除する(コメントに設定例があるので利用するとよい)
<p>
現在、<!-- FILE --> 0 <!-- FILE --> の文書がインデックス化され、
<!-- KEY --> 0 <!-- KEY --> 個のキーワードが登録されています。
</p>
<p>
<strong>インデックスの最終更新日: <!-- DATE --> date <!-- DATE --></strong>
</p>
<hr>
<form method="GET" action="{cgi}">
<p>
<strong>検索式:</strong> 

…

<p>
追加する(コメントに設定例があるので利用するとよい)
<strong>検索対象:</strong>
<ul>
<li><input type="checkbox" name="idxname" value="namazudoc" checked>Namazu文書
<li><input type="checkbox" name="idxname" value="kakasi">KAKASI文書
</ul>
</p>
checked
あらかじめ有効にする
value=
サブディレクトリの名前を指定

コラム:複数ディレクトリのインデックス

mknmzで,複数ディレクトリを対象としたインデックスを作りたい場合は,「mknmz -O 出力先D 対象D1 対象D2」のように指定します.既存のインデックスに追加したい場合は,「mknmz -O 出力先D -Y 対象D」とします.

このほか,対象ファイルのリストを作成し,-Fオプションで読み込ませることも可能です.ファイル名の代わりに“-”を指定すると,ファイルリストをパイプでmknmzに渡すことができます.

> dir /s /b c:\namazu c:\kakasi | mknmz -O indexdir -F -

テキスト形式以外のファイル

フィルタープログラムを使うことで,テキスト形式以外のファイルも検索対象にすることができます.

標準パッケージにはP.XXXの表に挙げた形式に対応したフィルターが付属されています.また,下記のサイトで入手することもできます.

http://cvs.namazu.org/namazu/filter/

また,各フィルターに必要なツールは,下記で確認できます.

http://www.namazu.org/doc/manual.html.ja#doc-filter

●mknmzの設定

mknmzでは,無駄な処理を避けるために,処理対象とするファイルの最大サイズなどが制限されています.PDFファイルなど,サイズの大きなファイルを対象としたい場合は,mknmzの設定ファイル(mknmzrc)で,この制限値を変更する必要があります.

なお,設定ファイルの所在は,「mknmz -C」で確認できます.

$FILE_SIZE_MAX   = 20000000;
                   ~~~~~~~~
                   最大サイズ(バイト数)

このほか,処理対象ファイルの拡張子の設定も可能です.$ALLOW_FILEで対象ファイル,$DENY_FILEで対象外ファイルの拡張子をそれぞれ指定します.

●対象形式の確認

mknmzは,実行時にファイル種別の自動判定を行い,フィルターの有無と照合して処理可能なファイルだけを対象にインデックスを作成します.

処理できるファイルの形式は,「mknmz -C」で表示される“対象メディアタイプ”確認できます.望みの形式が表示されていない場合は,フィルタープログラムがインストールされているか,また,フィルターに必要なツールがインストールされているかを確認しましょう.

なお,フィルターは,「mknmz -C」で表示されるFILTERDIRにインストールされています.

辞書のメンテナンス

Namazuでの検索は,KAKASI(またはChaSen)に登録されている単語がベースとなります.専門用語など,KAKASI辞書に登録されていないキーワードで検索をしたい場合は,辞書に単語を追加しておくことで検索精度を上げることができます.

辞書に単語を追加するには,(1)オリジナル辞書のテキストファイルを入手し,(2)追加したい単語リストを作成し,(3)mkkanwaコマンドを実行します.

辞書を更新したらばmknmzでインデックスを再作成しますが,このとき,既存のインデックスをいったん削除する必要があります.mknmzは,更新または追加された文書ファイルだけを扱うためです.

(1)オリジナル辞書のテキストファイルの入手

オリジナル辞書のテキストファイルは,KAKASIのftpサイト(ftp://ftp.namazu.org/kakasi/stable/)から入手します※.ファイル名はkakasidict.日付.gzで,2003年7月現在公開されているのはkakasidict.940620.gzです.

KAKASIのソースパッケージにも収録されています(ファイル名:kakasidict).

kakasidict.940620.gzは圧縮ファイルです.gzipコマンド>※で伸張(復元)します,

gzip.exe入手先:http://www.gzip.org/

※gzip形式は+Lhacaなどの汎用ツールも対応しています.

※+Lhaca:http://www.au.wakwak.com/~app/Lhaca/

(2)追加したい単語リストを作成

単語のリストを作成します.単語リストはEUCによるテキストファイルで,1件1行で「よみ 漢字」と書きます.書式はkakasidictを参考にするとよいでしょう.

(3)mkkanwaコマンドの実行

「mkkanwa 辞書ファイル 元ファイル 追加ファイル」を実行します.追加ファイルは複数指定できます.

> c:\kakasi\bin\mkkanwa.exe \kakasi\share\kakasi\kanwadict kakasidict.940620 add1.txt add2.txt

おわりに

Namazuはいかがでしたか?

データの分類/整理は紙の書類でもできますが,フリーキーワードによる検索はコンピュータならではの処理と言えるでしょう.

手軽にすばやく検索環境を整えることのできるNamazuは,電子化された文書を活用するための強力なアイテムです.

Namazu環境は,工夫次第でもっと便利になります.たとえば,インデックス生成の自動化です.UNIX系環境ならばcron,Windows2000/XP系環境ならばATコマンドで,mknmzを定期実行するのが簡単です.

検索画面のカスタマイズをしたい場合は,PerlやPHPなどが利用できます.たとえば,Namazuの標準パッケージには検索用のPerlモジュール(Search::Namazu)が収録されています.また,PECL(The PHP Extension Code Library)では,塚田卓也氏によるPHPモジュールが公開されています.

このほか,以下のインターフェースが開発されています.ぜひ,チャレンジしてみてください.

Ruby http://www.geocities.co.jp/SiliconValley/1816/(やまぐち氏)
http://www.tietew.jp/ruby/(Tietew氏)
PHP http://cvs.php.net/cvs.php/pecl/namazu(PECL)
http://tag3.hp.infoseek.co.jp/php/php4_namazu.html(TAG氏)
Java http://www.hi-ho.ne.jp/akios/namazu/(坂口昭男氏)