目次

namazu

日本でかつて広く使われていたと思われる全文検索エンジン。久しぶりに触ってみた。

導入してみる

Ubuntu Linux 9.04 Desktop (EUC-JP対応済み)にて。(2010-03-26)

パッケージで入手できるのは namazu 2.0.18 である。2009-09-23 に Namazu 2.0.20 が公開されている。

$ sudo aptitude install namazu2 namazu2-index-tools libtext-kakasi-perl libnkf-perl
$ sudo aptitude install dvi2tty # これで *.dvi はインデックスされる
$ sudo aptitude install xpdf-japanese 
$ sudo aptitude install wv xlHtml ppthtml
$ cd /path/to/nmz-index
$ mknmz /data/somewhere
検索対象のファイルを調べています...

...

4197/4197 - /data/somewhere/hoge/fuga.html [text/html]
インデックスを書き出しています...
[基本]
日付:                Fri Mar 26 22:28:53 2010
追加された文書の数:  4,197
サイズ (bytes):      56,569,226
合計の文書数:        4,197
追加キーワード数:    298,737
合計キーワード数:    298,737
わかち書き:          module_kakasi -ieuc -oeuc -w
経過時間 (秒):       453
ファイル/秒:         9.26
システム:            linux
Perl:                5.010000
Namazu:              2.0.18

検索するためのコマンドは下記:

$ namazu "linux tex" . |lv

PDFのインデクシングの不具合を解決する

どうやら pdf はインデクシングされていない。

$ cd /path/to/nmz-index
$ cp /etc/namazu/mknmzrc .
$ emacs -nw mknmzrc
-> $ALLOW_FILE のコメントアウトはずす
$ mknmz --config=mknmzrc /data/somewhere

うまくいかない

これと同じ状況

http://www.namazu.org/ml/namazu-users-ja/msg01059.html

$ pdftotext -enc EUC-JP /data/somewhere/hoge.pdf _hoge.txt

これはちゃんと動いた

$ pdftotext
pdftotext version 0.10.5

なぜ 1.0 じゃないのだ??

http://plaza.rakuten.co.jp/piyokota/diary/20091203/

http://blog.goo.ne.jp/gleaning/e/261614f1f7c17ec04f50b98e97a2ab63

/usr/share/namazu/filter/pdf.pl を修正する。

        if (util::islang("ja")) {
            if ($pdfconvver ge "0.10") { #if ($pdfconvver >= 1.00) {
                @pdfconvopts = ('-q', '-raw', '-enc', 'EUC-JP');
            } else {
                @pdfconvopts = ('-q', '-raw', '-eucjp');
            }

これで解決。ちなみに PPT ファイルもインデクシングできそう。

$ cd /path/to/nmz-index
$ mknmz --config=mknmzrc /data/somewhere/*.ppt

うごいた。

CGIで動かす

ちなみに CGI で動かすには?

http://www.ki.nu/software/namazu/tutorial/namazu.cgi.html

/usr/lib/cgi-bin/namazu.cgi

ができている。

Ubuntu の apache2 パッケージを入れる。

情報源 https://lists.ubuntu.com/archives/ubuntu-jp/2006-October/000152.html によると、 /usr/lib/cgi-bin/ はデフォルトで有効。

http://localhost/cgi-bin/namazu.cgi

はエラーにならない。が、出力は空です。。

設定ファイルをいじる。

$ cd /usr/lib/cgi-bin
$ cp /etc/namazu/namazurc .namazurc

.namazurc の編集

Index         /path/to/nmz-index
Lang          ja

これで動いた。

必要に応じて Replace を設定する。

## /server/dir/file を http//server/dir/file にする .namazurc の設定
Replace   ^/server/   http://server/

mknmz ふたたび

まず mknmz はファイル数 9600 で動いた。

大きすぎるとだめかもしれない。

インデックスを分割?

「mknmz -s :チェックポイント機構を有効にします。これはある程度のデータを処理した時点でデータを書き出し、処理プロセスを再起動します。これによって、大規模なデータを処理したときでもプロセスが膨れ上がることがなくなります」を使う?

再挑戦する。 -V -s オプションで

# rakefile.rb
TARGET_DIRS = "xxxx yyyy"
task :default do
  logname = "_mknmz_log_" + Time.new.strftime("%Y%m%d-%H%M")
  sh "mknmz -V -s --config=mknmzrc #{TARGET_DIRS} >#{logname} 2>&1"
end

このくらいの規模で動いた。 26000の追加が Core 2 Duo で約6時間。

[追加]
日付:                Mon Apr  5 23:54:33 2010
追加された文書の数:  26,505
サイズ (bytes):      2,337,989,791
合計の文書数:        36,161
追加キーワード数:    1,210,154
合計キーワード数:    5,753,111
わかち書き:          module_kakasi -ieuc -oeuc -w
経過時間 (秒):       21,786
ファイル/秒:         1.22
システム:            linux
Perl:                5.010000
Namazu:              2.0.18

インデクシングをやり直すときに、すでにインデクシングが終わったディレクトリを 引数につけるのを忘れると、そのインデクシング内容が消されてしまう。注意。。

調子にのって 80000 くらいのファイルをサイズ無制限でインデクシングしようとしたら、 24時間ちかく頑張ったあげく「mknmz: >NMZ.wi.tmp: Too many open files」で落ちた。

ちょっとずつディレクトリを増やしていくのが安全と思われる。