HOMEインデックス

自宅サーバー構築記


9.全文検索Namazu導入記録

a. Namazuとは

  • 対象とするディレクトリ内の全ての文章(html文書等)を文法的に解析して単語に分割しインデックスを作成する。検索時は予め作成しておいたインデックスを利用して高速に検索を行うことができる。コマンド及びwebブラウザからの利用が可能。

b. Namazuの構成

  • mknmz:インデックスを作成するスクリプト(perlモジュール)
  • namazu:コマンドラインから文字列を入力して検索する(c言語モジュール)
  • namazu.cgi:webページからcgiとして起動する。
  •  

c. Namazuに必要なプログラム(括弧内は今回使用したバージョン)

  • namazu(2.0.12)
  • perl(5.006)
  • nkf (2.0.2 UTF-8の文字コードを処理するため)
  • KAKASI(2.3.4)
  • NKF(nkfに同梱されているperl部品化モジュール)
  • File-MMagic(Namazuに同梱されているperl部品化モジュール)
  • Text::Kakasi(1.04)(perl部品化モジュール)

d. インストール

  • ダウンロードしたプログラムを/usr/local/srcに移動し以下のコマンドを実行

# tar xzvf namazu-2.0.12.tar.gz
# cd namazu-2.0.12
# ./configure
# make
# make install

  • インストールによって/usr/local/binに"mknmz"が/usr/local/libexecには"namazu.cgi"がインストールされる。"namazu.cgi"はcgiが動作可能なディレクトリ(home/httpd/cgi-bin)に移動する。
  • Perl部品化モジュールのインストール(対象プログラムのディレクトリに移動した後、以下のコマンドでインストールする)

# perl Makefile.PL
# make
# make install

e. コンフィギュレーションファイルの更新

  • mknmzのコンフィギュレーションファイルは/usr/local/etc/mknmzrc-sampleをmknmzrcという名前でコピーして作成する。変更する部分は、nkfが存在するディレクトリ、kakasiが存在するディレクトリ、分かち書きをkakasiにするかchasenにするかの選択。
  • namazu.cgiのコンフィギュレーションファイルは/usr/local/etc/namazurc-sampleを.namazurc(隠しファイル指定)という名前でnamazu.cgiが存在するディレクトリにコピーすることで作成する。変更する部分は以下のとおり。

Index /usr/local/var/namazu/index  → 検索時のデフォルトディレクトリ
Template /home/httpd/cgi-bin/namazu  → Templateの存在するディレクトリ
Replace /home/httpd/html http://o-hat.net/ → 検索結果のURIの変更指定
Lang ja → 日本語の指定

f. 確認方法

  • mknmzrcの設定内容を表示

# /usr/local/bin/mknmz -C

  • nkfのバージョン表示

# nkf -v

  • kakasiのバージョン表示

# kakasi -v

g. インデックスの作成

  • インデックスを作成するディレクトリを予め作成し移動する。
  • 以下のコマンドを投入し/home/httpd/htmlのインデックスを作成する

# /usr/local/bin/mknmz --exclude="INDEX作成を除外するディレクトリ" /home/httpd/html

  • マニュアルのインデックスを作成するため/usr/local/var/namazu/index配下にphpという名前のディレクトリを作成しておく。
  • phpディレクトリに移動して以下のコマンドを投入する

# /usr/local/bin/mknmz /home/manual/public_html/php

h. Templateの修正

  • インデックスを作成する同じディレクトリにNMZ.head.jaなどのwebページの部品が自動的に作成される。namazu.cgiを起動すると.namazurcで指定したTemplateの部品が結合されて表示される。インデックスを作成するたびに上書きされるので、変更した部品は退避しておく必要がある。退避した場合はnamazurcのTemplateのディレクトリを変更しておく必要がある。
  • NMZ.head.ja → 検索条件の部分
  • NMZ.body.ja → 検索式の説明部分
  • NMZ.foot.ja → 末尾部分
  • NMZ.result.short.ja → 表示形式を簡易に指定した場合の検索結果部分
  • NMZ.result.normal.ja → 表示形式が標準で指定した場合の検索結果部分
  • NMZ.tips.ja → 検索のコツの部分
  • cgi-binに使用するインデックスを指定する。 NMZ.head.jaの以下の部分を有効にしてfoo,bar,bazの部分を使用するインデックスが作成されたディレクトリ名に変更するればいい。そうすれば指定したディレクトリを検索対象とする。

<p>
<strong>検索対象:</strong>
<ul>
<li><input type="checkbox" name="idxname" value="foo">foo
<li><input type="checkbox" name="idxname" value="bar">bar
<li><input type="checkbox" name="idxname" value="baz">baz
</ul>
</p>

i. cronへの登録

  • インデックス作成を定期的に自動的に行うため以下のシェルスクリプトの実行をcronに登録する。cronの実行ログは/var/log/cronに存在する。またインデックス作成時のnamazuの実行結果は/usr/local/var/namazu/index/NMZ.logに存在する。

#!/bin/bash
export LANG=ja_JP.eucJP
export PEAL_BADLANG=0
/usr/local/bin/mknmz --output-dir=/usr/local/var/namazu/index --exclude="manual_dir" /home/httpd/html

i. 参考としたサイト

HOMEインデックス