Namazuで全文検索を行うには、まずインデックスというのを作成しておく必要があるんだ。そのインデックスを作成するツールが
mknmz なんだな。まずはコイツをならすことからはじめないとね。
mknmz
を使ってインデックスを作ってみよう
mknmzの構文
mknmz [options] 対象ディレクトリ
インデックスを作成するには mknmz コマンドを使う。mknmz
の引数にインデックス作成の対象とするディレクトリ名を与えてみよう。 たとえば、/home/httpd/html
を対象とするならば次のとおりだ。
% mknmz /home/httpd/html
すると、 /home/httpd/html 以下 の *.html *.txt
といったファイルについてインデックス作成が行われ、 mknmz を実行したディレクトリに NMZ.*
というファイルが作成される。この NMZ.* ファイルが Namazu のインデックスだ。
それじゃあ、実際の手順にいってみようか。とりあえず、一番最初に mknmz
コマンドのヘルプを表示させる。
% mknmz --help
また、-C オプションを付けると、その時の構成を表示するよ。
それじゃあ、こんどはインデックスの保存先ディレクトリの用意だ。
% mkdir /tmp/index
この例では、インデックスはカレントディレクトリに作られる。もし出力先を変更したい時には -O
オプションを使おう。
% mknmz -O /tmp/index ~/public_html
インデックス作成からはずしたいディレクトリがある場合は次の様な感じになる。
% mknmz --exclude=/private -O ./ /home/httpd/html
mknmz
コマンド全レシピ
mknmz のコマンドライン構文は以下のとおり。
mknmz
の構文
mknmz [options] 対象ディレクトリ
対象ファイル
省略 | オプション | 対象 |
---|---|---|
-a | --all | すべてのファイルを対象にしてインデックスを作成(デフォルトではHTMLだけが対象)。 |
-t | --media-type=MTYPE | 対象ファイルの文書形式を指定 |
-h | --mailnews | --media-type='message/rfc822' と同じ |
--mhonarc | --media-type='text/html; x-type=mhonarc' と同じ |
|
-F | --target-list=FILE | インデックス対象のファイルのリストを読み込む |
--allow=PATTERN | 対象とするファイル名の正規表現を指定 | |
--deny=PATTERN | 拒絶するファイル名の正規表現を指定 | |
--exclude=PATTERN | 除外するパス名の正規表現を指定 | |
-e | --robots | 次の記述を含む HTMLファイルを除外 <meta name=\"ROBOTS\" content=\"NOINDEX\"> |
-M | --meta | HTMLの <META> タグをフィールド指定検索に使う |
-r | --replace=CODE | URI を置換するためのコードを指定 |
--html-split | HTML ファイルを <a name=\"...\"> 単位で分割処理 |
|
--mtime=NUM | 変更日制限 find(1) の -mtime と同じ規則 例: -50 で 50 日以内、+50 で 50 日より古いものだけ |
-F オプションはファイルのリストが必要になるけど、手作業で作るのは大変だよね。find
コマンドを利用してファイルのリストを作成するならこんな感じだよ。
% find `pwd` -type f -print >
filelist.txt
形態素解析
省略 | オプション | 対象 |
---|---|---|
-c | --use-chasen | 日本語の単語のわかち書きに ChaSen を用いる |
-k | --use-kakasi | 日本語の単語のわかち書きに KAKASI を用いる |
-m | --use-chasen-noun | 名詞のみを抽出 |
-L | --indexing-lang=LANG | インデックス時に言語に特化した処理を行なう |
,文字列処理
省略 | オプション | 対象 |
---|---|---|
-E | --no-edge-symbol | 単語の両端の記号は削除 |
-G | --no-okurigana | 送り仮名を削除 |
-H | --no-hiragana | 平仮名のみの単語は登録しない |
-K | --no-symbol | 記号をすべて削除 |
,要約
省略 | オプション | 対象 |
---|---|---|
-U | --no-encode-uri | URI のエンコードを行わない |
-x | --no-heading-summary | HTML のヘディングによる要約作成を行わない |
インデックス作成
省略 | オプション | 対象 |
---|---|---|
--update=INDEX | 更新するインデックスを指定 | |
-Y | --no-delete | 削除された文書の検出を行わない |
-Z | --no-update | 文書の更新・削除を反映しない |
その他
省略 | オプション | 対象 |
---|---|---|
-s | --checkpoint | チェックポイント機構を作動 |
-C | --show-config | 現在の設定を表示 |
-f | --config=FILE | 設定ファイルを指定 |
-I | --include=FILE | カスタマイズ用ファイルを読み込む |
-O | --output-dir=DIR | インデックスの出力先を指定 |
-T | --template-dir=DIR | NMZ.{head,foot,body}.* のディレクトリを指定 |
-q | --quiet | インデックス処理の最中にメッセージを表示しない |
-v | --version | バージョン表示 |
-V | --verbose | 警告モード |
--debug | デバッグモード | |
--help | ヘルプを表示 |
mknmz
のデフォルト動作は、インデックスの対象ディレクトリにインデックスを作成する。ディレクトリを指定したい場合は、-O
オプションを使って次のようにする。
% mknmz -O /tmp/index ~/public_html
mknmzrc
を設定してインデックスを作成!
mknmz
はコマンドオプションでインデックスの作成方法をいろいろ指定できるけど、毎回それをするのは面倒だよね。そこで、オプションを指定しなくても、設定ファイルにあらかじめ指定しておけば、オプション付けをしなくてもよくなるんだ。もちろん、設定ファイルとは違う指定をしたくなったら、オプション指定するといい。優先度はコマンドオプションにあるからね。
mknmz は下記の順で設定ファイルを読み込むんだ。複数見つかった場合はすべて読み込む。
$(sysconfdir)/$(PACKAGE)/mknmzrc
通常は /usr/local/etc/mknmz/mknmzrc- ~/.mknmzrc
- -f, --config=FILE オプションで FILE に指定した mknmzrc
mknmzrc
というファイルで、初期状態を指定しておくことができる。あらかじめサンプルが用意されていて、環境によって違うけど、通常は
/usr/local/etc/namazu/ ディレクトリに mknmzrc-sample という
サンプルファイルが用意されている。これを自分の作業領域にコピーして設定するんだ。
ところで、mknmz がデフォルトで参照にする設定ファイルは /usr/local/share/namazu/pl/conf.pl
だ。mknmzrc を作成しているうちにうまくいかなくなったら、conf.pl を参考にしてみよう。
変数名 | 説明 |
---|---|
$ADDRESS | 管理者メールアドレスの設定 |
$HTML_SUFFIX | HTMLファイルの拡張子を設定 |
$ALLOW_FILE | 処理するファイルタイプを設定(正規表現) 正規表現で使われる語頭・語尾の ^ $ は不要。 |
$DENY_FILE | 処理しないファイルタイプを設定(正規表現) $DENY_FILE は -a と同時に使うと便利かも知れない。( .. を除く全てというような指定が可能) |
$EXCLUDE_PATH | 除外 path (正規表現) |
$DIRECTORY_INDEX | URL が / で終っている時に表示するファイル名。通常は index.html 。 |
$REMAIN_HEADER | RFC 822 Header などのうち本文として検索出来るものを指定 |
$SEARCH_FIELD | フィールド検索(「+subject: 検索語」のような形式)に使える項目を指定する |
$META_TAGS | 検索対象にするMETAタグを指定 |
%FIELD_ALIASES | メール見出名の置換ルール |
$NON_SEPARATION_ELEMENTS | これらがあっても単語は切らない |
$ON_MEMORY_MAX | namazu は文書を次々と読んで、それらから、まとめてインデックスを作る。その作業は全て記憶域で行なう。その読んだ文書の大きさの合計が、この数字を越えると、一旦インデックスを書き出す。そうして空にしてから、また次を読む。この大きさと、必要な記憶域の大きさは、単調増加の関係にある。 $ON_MEMORY_MAX に設定する数字について shell で、limit という操作をして表示される中の datasize が適切でないと、この指定は意味を持たない。 記憶域は沢山あるという時には、良く分らなければ、unlimit datasize としておくのが良い。 |
$FILE_SIZE_MAX | 対象にするファイルサイズの上限 |
$TEXT_SIZE_MAX | 対象にするテキストサイズの上限 |
$WORD_LENG_MAX | 対象にする単語の上限(単位:バイト) |
%Weight | スコアリングの点数 |
$INVALID_LENG | これ以上の長さのタグはスコアリングから外す。 |
$MAX_FIELD_LENGTH | (NMZ.field.* に保存する)文字列の大きさ (バイト) |
$NKF | NKF 起動法 |
$KAKASI | KAKASI 起動法 |
$CHASEN | ChaSen 起動法 |
$CHASEN_NOUN | |
$WAKATI | わかち書きに使用するプログラム(KAKASI/ChaSen)を指定 |
cron を使ってインデックスファイルの定期運用
インデックスファイルの作成に慣れたら、cron
を使って定期的にインデックス作成をするように設定するといいね。
スクリプトファイルの作成
shの場所を見つけよう。例では「/bin/sh」。
% which sh
/bin/sh
vi エディタ(または任意のエディタ)を起動する。
% vi namazu_index.sh
スクリプトファイル(上記の例では"namazu_index.sh")を下記のように編集する。
#! /bin/sh
# ログを出力するディレクトリに移動
cd /usr/local/apache/var/index
# mknmz の起動(オプションはあくまでサンプル)
mknmz --exclude=/private -O ./ /home/httpd/html
cronの編集
次はcronの編集。
% crontab -e
エディタが起動し、cronの編集画面が表示される。
0 0 * * * sh /root/sh/namazu_index.sh
上記の例では、0時0分にスクリプトファイルを起動している。これで、日ごとにログファイルが出力されるようになる。
文書フィルタ
mknmz は対象ファイルの文書形式を自動で判別して、適切なフィルタ処理を行うんだ。たとえば、
HTML文書だと <title> の抽 出や、HTMLタグの除去を行う。この処理は $(datadir)/$(PACKAGE)/filter
に置かれる文書フィ ルタによって行われるんだ。標準で用意されている文書フィルタは次の通り。
- gzip.pl
- gzipで圧縮されたファイルを扱う
必需品: gzip コマンド または Compress::Zlib モジュール - bzip2.pl
- bzip2で圧縮されたファイルを扱う
必需品: bzip2 コマンド - compress.pl
- compressで圧縮されたファイルを扱う
必需品: compressコマンド - deb.pl
- debパッケージを扱う
必需品: dpkgコマンド - dvi.pl
- dviファイルを扱う
必需品: dvi2tty, nkf - excel.pl
- Microsoft Excel文書を扱う
必需品: xlHtml, lv (Excel 97/98文書の場合)
代替品: doccat - hnf.pl
- ハイパー日記システム のファ イルを扱う
必需品: hnf フィルタは特殊。ハイパー日記システム・プロジェクトか ら Namazu for hns
を入手する必要がある - hdml.pl
- HDML文書を扱う
- html.pl
- HTML文書を扱う
- mailnews.pl
- Mail/News のファイルを扱う
- man.pl
- man を扱う
必需品: nroff または groff
注意: 日本語の man を扱うには -T nippon に対応した groff または jgroff
が必要 - mhonarc.pl
- MHonArc のファイルを扱う
- msword.pl
- Microsoft Word文書を扱う (日本語版は Word 97, 98, 2000)
必需品: wvWare, lv
代替品: doccat - pdf.pl
- PDF 文書を扱う
必需品: xpdf (バージョン 0.91 以上を推奨)に付属の pdftotextコマンド
注意: 日本語の PDF 文書を扱う場合、--enable-japanese で configure
されたものが必要 - postscript.pl
- PostScript 文書を扱う
必需品: ps2textコマンド - powerpoint.pl
- Microsoft PowerPoint文書を扱う
必需品: xlHtml に付属の pptHtmlコマンド, lv
代替品: doccat - rfc.pl
- RFCのファイルを扱う
- rpm.pl
- RPMパッケージを扱う
必需品: rpm - taro.pl
- 一太郎 9, 10 の文書を扱う
必需品: doccat - tex.pl
- TeXのファイルを扱う
必需品: detex
次の文書フィルタは Windows専用だよ。
- ichitaro456.pl
- 一太郎 4, 5, 6 の文書を扱う
必需品: JSTXT
注意: JSTXT は MS-DOS用のツールです。 - oleexcel.pl
- Microsoft Excel文書を扱う
必需品: Microsoft Excel 97 もしくは 2000 - olemsword.pl
- Microsoft Word文書を扱う
必需品: Microsoft Word 97 もしくは 98 もしくは 2000 - olepowerpoint.pl
- Microsoft PowerPoint文書を扱う
必需品: Microsoft PowerPoint 97 もしくは 2000 - oletaro.pl
- 一太郎 (バージョン 4 ~ 10) の文書を扱う
必需品: Microsoft Word 97 もしくは 98 もしくは 2000 - olertf.pl
- RTF (Rich Text Format) 形式の文書を扱う
必需品: Microsoft Word 97 もしくは 98 もしくは 2000