NAMAZUで全文検索


全文検索エンジンNAMAZUをインストールして、F&QやHandbook等をオフラインでも検索出来るようにしたいと思います。
尚、手元に参考になるような資料が無かったので、インターネットでNAMAZUのインストールについて掲載されている様々なWEBページから、部分的に抜粋して参考にしましています。まだ良く理解できていない部分が多く、ここでの設定の方法は適切で無いかもしれませんが、とりあえず使用出来きます。(^^;;
(マニュアルは、/usr/local/share/namazu/doc/jaの中にHTMLファイルでありました。)

HandbookとFAQをNAMAZUで検索

とりあえず、HandbookとFAQを自分のFreeBSDでオフラインで検索してみたいので、以下のFTPサイトから、HandbookとFAQの圧縮されたファイルを取ってきました。

ftp://ftp.jp.freebsd.org/.c0/FreeBSD/doc/en_US.ISO8859-1/books/handbook/book.html.tar.gz(Handbook英語版)
ftp://ftp.jp.freebsd.org/pub/FreeBSD/doc/ja/books/faq/book.html.tar.gz(FAQ日本語版)


.mknmzrcと.namazurcを任意の位置にコピー
ここでは、インターネットサーバー(Apache)を立ち上げているので、ブラウザーからNAMAZUで検索出来るようにしてみたいと思います。

まず、namazu.cgiを任意のディレクトリ(この例では、/usr/local/www/cgi-bin/)にコピーして、以下のようにして、.mknmzrcと.namazurcのファイルを作成しておきます。

hoge# cp /usr/local/libexec/namazu.cgi /usr/local/www/cgi-bin/
hoge# cp /usr/local/etc/namazu/mknmzrc-sample /usr/local/www/cgi-bin/.mknmzrc
hoge# cp /usr/local/etc/namazu/namazurc-sample /usr/local/www/cgi-bin/.namazurc 

コピーした.mknmzrcと.namazurcをエデイタで開いて編集します。

.mknmzrcの編集
#$ADDRESS = 'webmaster@gohan10.FreeBSD.org';

		↓

$ADDRESS = 'webmaster@hoge.foo.jp';
上記の部分をコメントアウトして、自分のメールアドレスでも書き込みます。

.namazurcの編集
Index         /usr/local/etc/namazu/index
Replace       /usr/local/share/doc/apache/  http://hoge.foo.jp/
Logging       off
Lang          ja
Scoring       tfidf
ここでの例では、/usr/local/etc/namazu/indexのディレクトリにindexが作成されますので、上記の様にしておきます。
Replaceは、ディレクトリをURLに対応させるための設定です。
※旨く検索出来ない場合は、Indexの指定を変えてみましょう。ここの例では、検索時に/usr/local/etc/namazu/indexのindexが参照されますが、handbook一つの場合等/usr/local/etc/namazu/index/handbookが参照されたりします。

次に、取ってきたファイルを格納するための、ディレクトリを作成します。

hoge# mkdir /usr/local/www/data/doc
hoge# mkdir /usr/local/www/data/doc/handbook

hoge# mkdir /usr/local/www/data/doc/FAQ 

取ってきたファイルを、上記のディレクトリにインストールしてから、以下の様にして展開します。

hoge# cd /usr/local/www/data/doc/handbook 
hoge# tar zxvf book.html.tar.gz

hoge# cd /usr/local/www/data/doc/FAQ 
hoge# tar zxvf book.html.tar.gz

次にIndexファイルが作成され、格納されるディレクトリを作成します。

hoge# mkdir /usr/local/etc/namazu/index
hoge# mkdir /usr/local/etc/namazu/index/handbook
hoge# mkdir /usr/local/etc/namazu/index/FAQ 

まずはじめに、handbook英語版のIndexを以下のようにして作成します。

hoge# mknmz -O /usr/local/etc/namazu/index/handbook/ /usr/local/www/data/doc/handbook 

次に、FAQ日本語版のIndexファイルを作成します。
Index総数が1なので、CPU486程度のコンピュータでも、約1〜2分程度で作成されます。

hoge# mknmz -O /usr/local/etc/namazu/index/FAQ/ /usr/local/www/data/doc/FAQ

検索用htmlファイルの作成
次に、ブラウザから検索できるように、/usr/local/etc/namazu/index/handbook/や、/usr/local/etc/namazu/index/FAQ/のディレクトリの中に作成される、NMZ.head.jaとNMZ.foot.jaを参考にしてhtmlファイルを作成します。
ここの例では、以下の2行をhtmlのフォーム(<form></form>)内に入れておけば、検索する事が出来ます。
<INPUT TYPE="checkbox" NAME="dbname" VALUE="handbook" CHECKED>FreeBSD-handbook
<INPUT TYPE="checkbox" NAME="dbname" VALUE="FAQ" CHECKED>FreeBSD日本語FAQ

他に、<form method="get" action="{cgi}">の部分を、変更しておきます。
<form method="get" action="{cgi}">

		↓

<form method="get" action="cgi-bin/namazu.cgi">


HTMLファイル記述例
<!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:webmaster@gohan10.FreeBSD.org">
<!-- LINK-REV-MADE -->
<title>Namazu a full text retrieval search system</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 lang="ja">
<h1>Namazu による全文検索システム</h1>
<p>
現在、<!-- FILE --> 183 <!-- FILE --> の文書がインデックス化され、
<!-- KEY --> 43,821 <!-- KEY --> 個のキーワードが登録されています。
</p>
<p>
<strong>インデックスの最終更新日: <!-- DATE --> 2002-02-02 <!-- DATE --></strong>
</p>
<hr>
<form method="get" action="cgi-bin/namazu.cgi">
<p>
<strong>検索式:</strong>
<input type="text" name="query" size="40">
<input type="submit" name="submit" value="Search!">
<input type="hidden" name="whence" value="0">
<!-- <input type="hidden" name="idxname" value="foobar"> -->
<a href="cgi-bin/namazu.cgi">[検索方法]</a>
</p>
<p>
<strong>表示件数:</strong>
<select name="max">
<option value="10">10
<option selected value="20">20
<option 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>

<p>
<strong>検索対象:</strong>
<ul>
<li><INPUT TYPE="checkbox" NAME="dbname" VALUE="handbook" CHECKED>FreeBSD-handbook
<li><INPUT TYPE="checkbox" NAME="dbname" VALUE="FAQ" CHECKED>FreeBSD-日本語FAQ 
</ul>
</p>
<!--
<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="bar">baz
-->
</form>


<hr>
<p>
この全文検索システムは
<strong><a href="http://www.namazu.org/">Namazu</a> <!-- VERSION --> v2.0.5 <!-- VERSION --></strong>
によって構築されています。
</p>
<address>
<!-- ADDRESS -->
<a href="mailto:webmaster@gohan10.FreeBSD.org">webmaster@gohan10.FreeBSD.org</a>
<!-- ADDRESS -->
</address>
</body>
</html>



そして、作成したhtmlファイルを/usr/local/www/cgi-bin/の中に、適当なファイル名でコピーします。
これで、準備完了ですが、namazu.cgiのパーミッションが適切でないと、検索出来ませんので、パーミッションを705や755等に変えておきます。

hoge# chmod 755 /usr/local/www/cgi-bin/namazu.cgi

ブラウザでアクセスすると、以下のように検索できるとおもいます。
NAMAZU1.GIF - 14,390BYTES

jmanのIndex化

FreeBSDの日本語マニュアル、jmanもIndex化してNAMAZUで検索させることが出来ます。
自分の環境の場合、jmanは/usr/share/man/jaの中に入っているので、これを/usr/local/etc/namazu/index/doc/jmanと/usr/local/www/data/doc/jman言うディレクトリを作成して、/usr/local/www/data/doc/jmanにjmanをコピーして、Index化に挑戦してみました。

hoge# mkdir /usr/local/etc/namazu/index/jman
hoge# cp -r /usr/share/man/ja /usr/local/www/data/doc/
hoge# mv /usr/local/www/data/doc/ja /usr/local/www/data/doc/jman
hoge# mknmz -O /usr/local/etc/namazu/index/jman/ /usr/local/www/data/doc/jman
結果は、Indexファイル数が1036と巨大だったため、889番目をIndex化中にハングアップしてしまい、操作不能になってしまいました。(^^;;

環境変数LANGの設定
環境変数のLANGに日本語が設定されていないと、SHIFT-JISで記述されているファイルが正常にINDEX化できなかったり、検索の時にHITしてくれませんので、./cshrcに以下の内容を追加します。
setenv	LANG	ja_JP.EUC
setenv	LC_CTYPE ja_JP.EUC
システムを再起動させ、日本語を文字化けさせずにコマンドラインに表示させるには、konと打ち込んでコンソールを切り替える必要があります。

Windows用の辞書Atok12をKAKASIにコンバート
Windowsで使用しているAtok12を、FreeBSDのKAKASIにコンバートしてみたいと思います。
まず、Atok12の辞書をテキストファイルとして書き出して、手元のエデイタやツールなどでEUC形式に変換しておきます。
上記の作業を行ってから、FreeBSDの中の適当な領域にコピーして、辞書の形式をAtok形式から、skk形式に変換します。ここでは、/usr/tmpに辞書をコピーしてから作業を行うものとします。

hoge# cd /usr/tmp
hoge# cat atok12.euc | awk '{print $1 " " $2}' > atok12.skk


次に、kakasiのsrcディレクトリにcopyして、kakasiのツールのmkkanwaを利用して、KAKASIと合併します。
mkkanwa kanwadictのパス 辞書ファイル1 辞書ファイル2・・・

hoge# cd /usr/tmp
hoge# cp atok12.skk /usr/local/share/kakasi/
hoge# mkkanwa /usr/local/share/kakasi/kanwadict atok12.skk
以上で作業は終了です。

BACK