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」で落ちた。
ちょっとずつディレクトリを増やしていくのが安全と思われる。