hakeの日記

Windows環境でプログラミングの勉強をしています。

namazuによる全文検索

wgetで取得してきたhtmlのドキュメントが結構な量になってきたので、全文検索ができるnamazuの導入をしてみました。

設定

他のnamazuを導入しているサイトを拝見するとapacheをいれてcgiを使用してブラウザから検索可能にしているところが多いですが、自分の場合あまり大げさなことはしたくないのでターミナルからコマンドで検索するようにします。

  • Private Linux Zaurus Packages for Emacsenからnamazukakasinkf、 File::MMagicおよびリンク先からperlを入手してインストール
  • namazuの使用方法については/home/QtPalmtop/share/namazu/doc/jaの下にhtmlファイルで解説あり。
  • インデックスの作成。検索したいhtmlファイルは~/Documents/Web_Files/Pagememo_Filesの下の各ディレクトリにあるので、ここでインデックスを作成。
$ cd Documents/Web_Files/Pagememo_Files
$ mknmz -k -media-type="text/html" .

なお、このインデックス作成の作業をザウルスで行うとものスゴイ時間がかかります。約4500個のhtmlファイルのインデックス作成にクロックアップさせて6時間程度かかりました。夜に変換させる場合はオートパワーオフさせないようにするのにも注意(自分の場合はネット接続状態で行いました)
時間短縮させるのになにか良い方法はないものか。。。
インデックス作成が終了するとカレントディレクトリにNMZで始まるファイルが数十個作成されます。

  • ~/.namazurcの設定。/home/QtPalmtop/etc/namazurcをコピー、Index行とTemplate行のパスをインデックスを作成した/home/zaurus/Documents/Web_Files/Pagememo_Filesに書き換え
  • インデックスと同じ場所にある検索結果フォーマットテンプレートファイル(NMZ.xxx.ja)を必要に応じて書き換え

検索

検索時は検索語と必要であればインデックスのあるディレクトリを引数にして行う。全ての候補をhtmlファイルに出力させたい場合は以下のとおり

$ namazu -a -h "hoge" > foo.html

インデックス作成は時間がかかりましたけど検索は速くできます。ちなみに日本語の検索も問題なくできました。

htmlファイルを作成させないで直接ブラウザを起動させる場合はbnamazuというコマンドを使用、以下はブラウザにw3mを使用した場合

$ bnamazu -b w3m -a -h "hoge"

試しにNetFrontOperaでも試みてみましたが、NetFrontでは検索結果が表示されませんでした。検索結果の何番目から何件表示させたいという場合は--maxと--whenceオプションを使用。
いちいちオプション付きのコマンドを打つのが面倒なのでシェルスクリプトnmzを作成

#!/bin/sh

#IDXDIR=/home/zaurus/Documents/Web_Files/Pagememo_Files
BROWSER=w3m

if [ -z "$1" ]; then
	echo "Usage : nmz word [whence-number]"
	exit
fi
if [ -z "$2" ]; then
	# 全件表示
	bnamazu -b $BROWSER -a -h "$1"
else
	# 指定順位からの20件表示
	bnamazu -b $BROWSER -h --max=20 --whence="$2" "$1"
fi

これでターミナルから

$ nmz "foo bar"
$ nmz hoge 100

などで簡単検索ができます。