2003.11.23 修正   環境 Vine linux 2.6 目次へ戻る

Namazu による全文検索システム

現在、○○○ の文書がインデックス化され、○○○○ 個のキーワードが登録されています。

インデックスの最終更新日:○○○○ー○○ー○○
検索式:[         ][Search!][検索方法]
表示件数:[20] 表示形式:[標準] ソート: [スコア]

□□ Namazu □□

日本語対応全文検索システム (http://www.namazu.org/)
検索の精度はまあまあだが、手軽に利用できるというのが良い。

インデックス
あらかじめ、どの単語がどの文書で使われているかを記録した索引(インデックス)を作成することで、高速に検索できるようにしています。

1 インデックスの作成
mknmz -O [インデックスの作成先のディレクトリ] [作成したいインデックス元のディレクトリ]
オプションに -O (0 ではない、アルファベットのO) をつけることで、インデックスの作成先を指定できる
$ mknmz -O /home/sanngatu/w3m/ /usr/share/w3m/
/home/sanngatu/w3m/ のディレクトリ内に、/usr/share/w3m/ のインデックスを作ります。

2 検索
namazu --max=5 "[検索のキーワード]" [参照するインデックス]
オプションに --max=数字 をつけることで、表示される検索結果の数を決められる
$ namazu --max=5 "ブックマーク" /home/sanngatu/w3m/
最大5つまでのブックマーク についての、/usr/share/w3m/のインデックスからの検索結果が表示される

□□□ mknmz-wwwoffle( wwwoffle との連係 ) □□□

ところで、wwwoffle のキャッシュというのは
D3yIYv5lwxrPpcZptWXtsYg
D47r0ExpUDZfkMItoiR0bFQ
という具合でとても判別できるようなものではありません。このままでは mknmz でインデックスを作成できないのですが( txt html 形式等 でないとダメ)、mknmz-wwwoffle は wwwoffle の見た目何が何やらさっぱりな キャッシュに対してインデックスを作成できる mknmz 用フィルタを作成します。

入手先 mknmz-wwwoffle Official Page http://www.naney.org/comp/distrib/mknmz-wwwoffle/index.html
(渡部 喜正 氏)

ちなみに、Namazu2.0 系を必要としますので、Namazu1.3 系 の方は2.0 系に変えましょう。
自分の使っているディストリビューションに入っているNamazu のバージョンを調べるには、

$ rpm -q namazu
(rpm -qi namazu だと、もっと詳細な説明が出てくる)

Vine2.5 では namazu 2.0.10 ですので問題ないです。が、前もって調べなかった馬鹿な私は namazu 2.0.12.tar.gz を落してきて入れてしまいました。どうなってるんだろう)

■□ mknmz-wwwoffle のインストール
(あらかじめ、which namazu で、namazu がどこにインストールされているか調べておく .../usr/bin/namazu )
mknmz-wwwoffle のconfigure時に、namazu の実行ファイルのパスを --prefix で指定します。

/usr/local/ で root 権限で
# tar zxvf mknmz-wwwoffle-0.7.2.tar.gz
# cd mknmz-wwwoffle-0.7.2
# ./configue --prefix=/usr
# make
# make install

namazu のフィルター格納場所 /usr/share/namazu/filter/ に、作成 された mknmz 用フィルタ wwwofflecache.plが格納されます。
mknmz-wwwoffle の 実行ファイルも /usr/binに置かれます。

これで、mknmz-wwwoffle が動きます。
namazu のインストール先が /usr/bin/namazu だったのに、何故、--prefix= の指定先が /usr/bin/ ではないのか。
--prefix= はインストール先のパスを指定するものである。パスは通常、/bin ディレクトリ内に納められている。
ので、わざわざ /bin までつけなくとも最初からそう解釈してくれるからなのかなぁ、と思ったり。

■■ wwwoffle のキャッシュ( /var/spool/wwwoffle/http/ )からインデックスを作成する

インデックスの作成先 は /home/httpd/wwwoffle/ にします

$ mknmz-wwwoffle -O /home/httpd/wwwoffle/ /var/spool/wwwoffle/http/
かなり時間がかかります。8185 個のファイルに対し、約1時間かかりました(cpu は700 ほぼフル活動させたにも関わらず)。
2回目からは差分のみなので、大幅に時間は短縮されます。
コマンド入力後、十数秒程何も表示されませんが、焦らず待ってください。

検索対象のファイルを調べています...
8193個のファイルがインデックス作成の対象として見つかりました
1/8193 - http://******.htm [text/html]
2/8193 - http://******.htm [text/html]
*
8185/8185 - http://******.html [text/html]
インデックスを書き出しています...
[基本]
日付: Wed Dec 18 02:55:39 2002
追加された文書の数: 8,185
サイズ (bytes): 96,364,447
合計の文書数: 8,185
追加キーワード数: 543,150
合計キーワード数: 543,150
わかち書き: module_kakasi -ieuc -oeuc -w
経過時間 (秒): 3,726
ファイル/秒: 2.20
システム: linux
Perl: 5.006001
Namazu: 2.0.10

と言う具合に表示される筈です。

インデックス作成先のディレクトリの中を見て、◯◯◯.tmp というファイル(作業中ということ)ばっかりあったとしたら、何らかの理由でインデックスは作成されていません。もう一度やりなおしましょう。

しかし、いくらTabで補完できるとはいえ、こんな長いコマンド、毎回毎回打っ てられません。インデックスを更新するのが億劫になるというものです。 エイリアスを利用すると楽です。

エイリアスとは、コマンドにあだ名をつけるようなものです(何ていい加減な)。
(注意:複合コマンド内では エイリアスを使わないこと)
ユーザーディレクトリの.bashrc にて編集します。

書式   alias あだ名='コマンド'
# .bashrc

(以下、省略)
# set aliases
alias ls='ls -F --color=auto'
alias ll='ls -la --color=auto'
alias la='ls -a --color=auto'
alias eng='LANG=C LANGUAGE=C LC_ALL=C'
# my settei
alias mknmz='mknmz-wwwoffle -O /home/httpd/wwwoffle/ /var/spool/wwwoffle/http/'
alias fbird='MozillaFirebird'

ちなみに記録は、878914 ファイル(2167480108 bytes) の文書を対象にしたものです。(Namazu http://www.namazu.org/FAQ.html)

テストしたいのなら、/var/spool/wwwoffle/http/ 内から、キャッシュが小さめの ホストを撰んでインデックスを作ってみましょう。
$ mknmz-wwwoffle -O /home/httpd/wwwoffle/google/ /var/spool/wwwoffle/http/www.google.co.jp/

■■ 検索

$ namazu --max=4 "キーワード" /home/httpd/wwwoffle/
結果が表示されれば、インデックスは無事、作成されています。

コマンドで検索をかけても、コンソールに表示されたのでは意味がありませんよね。何もできないし。ブラウザから検索がかけられるようにしたいものです。せっかくですから、CGI を使いましょう。

■ CGI(Common Gateway Interface)
Webサーバー上でプログラムを使って処理した結果を表示させる機能のこと(受け売り)
掲示板とかカウンターとかのことです。検索もCGIです。

CGI を使うには、サーバーが動いていて、CGIが使えるよう設定されていなければなりません。
linux には apche(アパッチ)というフリーかつ高性能のサーバーがあります。迷わずapache にしましょう。

で、色々なホームページを見ながらやってみたのですが思うようにいかず、しょせん自分一人で使ってるマシンだし、動けばいいやってことで、横着してます。(駄目駄目)

/home/sanngatu/public_html/cgi-bin/ 以下に namazu.cgi もろもろを置くようにしたのだけど、

Forbidden
You don't have permission to access /cgi-bin/namazu.cgi on this server
と出る。apache の CGI の設定が出来てないです。

仕方ないので、namazu.cgi を /home/httpd/cgi-bin/ に置き(というか、もともと雛型として用意されている)、 namazu のインデックスを /home/httpd/namazu-index/wwwoffle/ に置く

□□ apache □□

すでにインストールしてあるとして、
(なければ、rpm -ivh apache )
起動 ( root 権限 )
# /sbin/service httpd start
(再起動後は自動的に起動する)
再起動(http.conf をいじった後で、読みこませたりするのに使う)
# /sbin/service httpd restart
停止
# /sbin/service httpd stop

apache の設定ファイル
/etc/httpd/conf/http.conf
本当は 少しいじって 任意のディレクトリで CGI が使えるように設定したかったんだけど、出来ないので何もいじらずにおく

□□ namazu.cgi □□
□■ namazu.cgi

namazu.cgi は /home/httpd/cgi-bin/ にあったものをそのまま使ったような気が(汗)
namazu をインストールしたらどっかにあるので、locate か find で探してください。

$ locate namazu.cgi ( find より速いのでlocate の方が好き )

パーミッション を755 にしておくことを忘れずに(とにかく実行権限をつけておく)

$ chmod 755 /home/httpd/cgi-bin/namazu.cgi

■□ namazu のインターフェース部分のファイル をコピー
$ cp /usr/share/namazu/template/NMZ.*.ja /home/httpd/cgi-bin/
日本語用のファイルだけで良いので、NMZ.*.ja のみ

####### 追記

/usr/share/namazu/template/ の NMZ.head.ja だと、「…○○○の文書がインデックス化され。○○○個のキーワードが…」の欄は 0 のままです。せっかくですから、ちゃんと反映されるようにしましょう。

mknmz -O /home/httpd/wwwoffle/ /var/spool/wwwoffle/http/

で /home/httpd/wwwoffle 内に出来る NMZ.head.ja がそれなので、Namazu の 関連ファイルの置き場所を /home/httpd/wwwoffle に指定しておけば良いのですが、私は NMZ.result.normal.ja を書き換えているのでそれもちょっと…(インデックスを更新したら上書きされそう)
リンクさせました

$ ln home/httpd/wwwoffle/NMZ.head.ja home/httpd/cgi-bin/
#######

■□ namazu の設定ファイルをコピー
$ cp /etc/namazu/.namazurc /home/httpd/cgi-bin/
設定変更
Index /home/httpd/wwwoffle/ namazu のインデックスの置き場所
Template /home/httpd/cgi-bin/ namazu の関連ファイルの置き場所
Lang ja 使用言語
ブラウザで http://localhost/cgi-bin/namazu.cgi に接続できたら成功

□■□
ついでに namazu で検索した結果 を wwwoffle で編集できるようにしましょう。
NMZ.result.normal.ja の好みの位置に
<a href="http://localhost:8080/index/url/?${uri}sort=alpha">wwwoffle</a> を追加

<dd><a href="${uri}">${uri}</a> (${size} bytes)<br>
(<a href="http://localhost:8080/index/url/?${uri}sort=alpha">wwwoffle Index画面へ</a>)


2002.12.28 環境 Vine linux 2.5
目次へ戻る