Namazu インストールと設定

Linux での Namazu 2.0.16 のインストールと設定手順です。

1.インストール

namazu-2.0.16.tar.gzを展開して、コンパイルとインストールを行います。
> tar zxvf namazu-2.0.16.tar.gz
> cd namazu-2.0.16
> ./configure
> make
> make install

2.設定

設定ファイルは Namazu で検索する時に参照するものと、 検索インデックスを作成する時に参照するものがあります。 設定ファイルごとに Namazu の動作を変更できるので、 ディレクトリごとに分けておくと良いかも知れません。
> mkdir /home/user/namazu
/usr/local/etc/namazu 配下に「mknmzrc-sample」と「namazurc-sample」があるので、 これらをもとに、設定ファイルを作成します。
> cp /usr/local/etc/namazu/mknmzrc-sample /home/user/namazu/mknmzrc
> cp /usr/local/etc/namazu/namazurc-sample /home/user/namazu/namazurc

(1)mknmzrcの設定

#
# This is a Namazu configuration file for mknmz.
#
package conf;  # Don't remove this line!

#===================================================================
#
# Administrator's email address
#
# $ADDRESS = 'webmaster@insnet.co.jp';

#===================================================================
#
# Regular Expression Patterns
#

#
# This pattern specifies HTML suffixes.
#
# $HTML_SUFFIX = "html?|[ps]html|html\\.[a-z]{2}";

#
# This pattern specifies file names which will be targeted.
# NOTE: It can be specified by --allow=regex option.
#       Do NOT use `$' or `^' anchors.
#       Case-insensitive.
#
# $ALLOW_FILE = ".*\\.(?:$HTML_SUFFIX)|.*\\.txt" . # HTML, plain text
#               "|.*\\.gz|.*\\.Z|.*\\.bz2" .       # Compressed files
#               "|.*\\.pdf|.*\\.ps" .              # PDF, PostScript
#               "|.*\\.tex|.*\\.dvi" .             # TeX, DVI
#               "|.*\\.rpm|.*\\.deb" .             # RPM, DEB
#               "|.*\\.doc|.*\\.xls|.*\\.pp[st]" . # Word, Excel, PowerPoint
#               "|.*\\.vs[dst]|.*\\.v[dst]x" .     # Visio
#               "|.*\\.j[sabf]w|.*\\.jtd" .        # Ichitaro 4, 5, 6, 7, 8
#               "|.*\\.sx[widc]" .                 # OpenOffice Writer,Calc,Impress,Draw
#               "|.*\\.od[tspg]" .                 # OpenOffice2.0
#               "|.*\\.rtf" .                      # Rich Text Format
#               "|.*\\.hdml|.*\\.mht" .            # HDML MHTML
#               "|.*\\.mp3" .                      # MP3
#               "|.*\\.gnumeric" .                 # Gnumeric
#               "|.*\\.kwd|.*\\.ksp" .             # KWord, KSpread
#               "|.*\\.kpr|.*\\.flw" .             # KPresenter, Kivio
#               "|\\d+|[-\\w]+\\.[1-9n]";          # Mail/News, man
$ALLOW_FILE = ".*\\.(?:$HTML_SUFFIX)|.*\\.txt" .   # HTML, plain text
              "|.*\\.pdf|.*\\.ps";                 # PDF, PostScript
	
  $ALLOW_FILE に検索対象となるファイルの拡張子を設定します。
  先頭のコメントを外すだけでOKですが、最後に「;」で終わるように注意してください。
	

#
# This pattern specifies file names which will NOT be targeted.
# NOTE: It can be specified by --deny=regex option.
#       Do NOT use `$' or `^' anchors.
#       Case-insensitive.
#
# $DENY_FILE = ".*\\.(gif|png|jpg|jpeg)|.*\\.tar\\.gz|core|.*\\.bak|.*~|\\..*|\x23.*";
$DENY_FILE = ".*\\.(gif|png|jpg|jpeg)|.*\\.tar\\.gz|core|.*\\.bak|.*~|\\..*|\x23.*|.*\\.exe";
	
  $DENY_FILE に検索対象としないファイルの拡張子を設定します。
  画像やプログラムなどのバイナリーファイルを設定しましょう。
	

#
# This pattern specifies DDN(DOS Device Name) which will NOT be targeted.
# NOTE: Only for Windows.
#       Do NOT use `$' or `^' anchors.
#       Case-insensitive.
#
# $DENY_DDN = "con|aux|nul|prn|lpt[1-9]|com[1-9]|clock\$|xmsxxxx0";

#
# This pattern specifies PATHNAMEs which will NOT be targeted.
# NOTE: Usually specified by --exclude=regex option.
#
# $EXCLUDE_PATH = undef;

#
# This pattern specifies file names which can be omitted
# in URI.  e.g., 'index.html|index.htm|Default.html'
#
# NOTE: This is similar to Apache's "DirectoryIndex" directive.
#
# $DIRECTORY_INDEX = "";

#
# This pattern specifies Mail/News's fields in its header which
# should be searchable.  NOTE: case-insensitive
#
# $REMAIN_HEADER = "From|Date|Message-ID";

#
# This pattern specifies fields which used for field-specified
# searching.  NOTE: case-insensitive
#
# $SEARCH_FIELD = "message-id|subject|from|date|uri|newsgroups|to|summary|size";

#
# This pattern specifies meta tags which used for field-specified
# searching.  NOTE: case-insensitive
#
# $META_TAGS = "keywords|description";

#
# This pattern specifies aliases for NMZ.field.* files.
# NOTE: Editing NOT recommended.
#
# %FIELD_ALIASES = ('title' => 'subject', 'author' => 'from');

#
# This pattern specifies HTML elements which should be replaced with
# null string when removing them. Normally, the elements are replaced
# with a single space character.
#
# $NON_SEPARATION_ELEMENTS = 'A|TT|CODE|SAMP|KBD|VAR|B|STRONG|I|EM|CITE|FONT|U|'.
#                        'STRIKE|BIG|SMALL|DFN|ABBR|ACRONYM|Q|SUB|SUP|SPAN|BDO';

#
# This pattern specifies attribute of a HTML tag which should be
# searchable.
#
# $HTML_ATTRIBUTES = 'ALT|SUMMARY|TITLE';

#===================================================================
#
# Critical Numbers
#

#
# The max size of files which can be loaded in memory at once.
# If you have much memory, you can increase the value.
# If you have less memory, you can decrease the value.
#
# $ON_MEMORY_MAX   = 5000000;

#
# The max file size for indexing. Files larger than this
# will be ignored.
# NOTE: This value is usually larger than TEXT_SIZE_MAX because
#       binary-formated files such as PDF, Word are larger.
#
# $FILE_SIZE_MAX   = 2000000;

#
# The max text size for indexing. Files larger than this
# will be ignored.
#
# $TEXT_SIZE_MAX   =  600000;

#
# The max length of a word. the word longer than this will be ignored.
#
# $WORD_LENG_MAX   = 128;

#
# Weights for HTML elements which are used for term weightning.
#
# %Weight =
#     (
#      'html' => {
#          'title'  => 16,
#          'h1'     => 8,
#          'h2'     => 7,
#          'h3'     => 6,
#          'h4'     => 5,
#          'h5'     => 4,
#          'h6'     => 3,
#          'a'      => 4,
#          'strong' => 2,
#          'em'     => 2,
#          'kbd'    => 2,
#          'samp'   => 2,
#          'var'    => 2,
#          'code'   => 2,
#          'cite'   => 2,
#          'abbr'   => 2,
#          'acronym'=> 2,
#          'dfn'    => 2,
#      },
#      'metakey' => 32, # for <meta name="keywords" content="foo bar">
#      'headers' => 8,  # for Mail/News' headers
# );

#
# The max length of a HTML-tagged string which can be processed for
# term weighting.
# NOTE: There are not a few people has a bad manner using
#       <h[1-6]> for changing a font size.
#
# $INVALID_LENG = 128;

#
# The max length of a field.
# This MUST be smaller than libnamazu.h's BUFSIZE (usually 1024).
#
# $MAX_FIELD_LENGTH = 200;

#===================================================================
#
# Softwares for handling a Japanese text
#

#
# Network Kanji Filter nkf v1.71 or later
#
# $NKF = "module_nkf";
$NKF = "/usr/bin/nkf";
	
  漢字コード変換プログラム NKF の設定を行います。
	

#
# KAKASI 2.x or later
# Text::Kakasi 1.05 or later
#
# $KAKASI = "module_kakasi -ieuc -oeuc -w";
$KAKASI = "/usr/bin/kakasi -ieuc -oeuc -w";
	
  分かち書き(単語分割)プログラムの設定を行います。
  ※kakasi の「-w」オプションで分かち書きを行います。
	

#
# ChaSen 2.02 or later (simple wakatigaki)
# Text::ChaSen 1.03
#
# $CHASEN = "no";

#
# ChaSen 2.02 or later (with noun words extraction)
#
# $CHASEN_NOUN = "no";

#
# MeCab
#
# $MECAB = "no";

#
# Default Japanese processer: KAKASI or ChaSen.
#
# $WAKATI  = $KAKASI;

#===================================================================
#
#
# Directories
#
# $LIBDIR = "@PERLLIBDIR@";
# $FILTERDIR = "@FILTERDIR@";
# $TEMPLATEDIR = "@TEMPLATEDIR@";

# 1;

(2)namazurcの設定

# This is a Namazu configuration file for namazu or namazu.cgi.
#
#  Originally, this file is named 'namazurc-sample'.  so you should
#  copy this to 'namazurc' to make the file effective.
#
#  Each item is must be separated by one or more SPACE or TAB characters.
#  You can use a double-quoted string for represanting a string which
#  contains SPACE or TAB characters like "foo bar baz".

##
## Index: Specify the default directory.
##
#Index         /usr/local/var/namazu/index
Index          /home/user/namazu/index
	
  検索インデックスの格納ディレクトリを設定します。
	

##
## Template: Set the template directory containing
## NMZ.{head,foot,body,tips,result} files.
##
#Template      /usr/local/var/namazu/template
Template       /home/user/namazu/template
	
  検索結果のデザインテンプレートのディレクトリを設定します。
	

##
## Replace: Replace TARGET with REPLACEMENT in URIs in search
## results.
##
## TARGET is specified by Ruby's perl-like regular expressions.
## You can caputure sub-strings in TARGET by surrounding them
## with `(' and `)'and use them later as backreferences by
## \1, \2, \3,... \9.
##
## To use meta characters literally such as `*', `+', `?', `|',
## `[', `]', `{', `}', `(', `)', escape them with `\'.
##
## e.g.,
##
##    Replace  /home/foo/public_html/   http://www.foobar.jp/~foo/
##    Replace  /home/(.*)/public_html/  http://www.foobar.jp/\1/
##    Replace  /[Cc]\|/foo/             http://www.foobar.jp/
##
## If you do not want to do the processing on command line use,
## run namazu with -U option.
##
## You can specify more than one Replace rules but the only
## first-matched rule are applied.
##
#Replace       /home/foo/public_html/  http://www.foo.bar.jp/~foo/
Replace /home/www/  http://www.insnet.co.jp/
	
  検索結果のパスをURLに変換する設定を行います。
  ※/home/www/index.html → http://www.insnet.co.jp/index.html
	

##
## Logging: Set OFF to turn off keyword logging to NMZ.slog.
## Default is ON.
##
#Logging       off

##
## Lang: Set the locale code such as `ja_JP.eucJP', `ja_JP.SJIS',
## `de', etc.  This directive works only if the environment
## variable LANG is not set because the directive is mainly
## intended for CGI use.  On the shell, You can set
## environemtnt variable LANG instead of using the directive.
##
## If you set `de' to it, namazu.cgi use
## NMZ.(head|foot|body|tips|results).de for displaying results
## and use a proper message catalog for `de'.
##
Lang          ja

##
## Scoring: Set the scoring method "tfidf" or "simple".
##
#Scoring       tfidf

##
## EmphasisTags: Set the pair of html elements which is used in
## keyword emphasizing for search results.
##
#EmphasisTags  "<strong class=\"keyword\">"   "</strong>"

##
## MaxHit: Set the maximum number of documents which can be
## handled in query operation.  If documents matching a
## query exceed the value, they will be ignored.
##
#MaxHit 10000

##
## MaxMatch: Set the maximum number of words which can be
## handled in regex/prefix/inside/suffix query. If documents
## matching a query exceed the value, they will be ignored.
##
#MaxMatch       1000

##
## ContentType: Set "Content-Type" header output. If you want to
## use non-HTML template files, set it suitably.
##
#ContentType    "text/x-hdml"

##
## Suicide_Time: namazu.cgi stops the process in 60 seconds by
## default.
##
#Suicide_Time   60

##
## Regex_Search: Set OFF to turn off regex_search.
## Default is ON.
##
#Regex_Search   off

(3)設定ファイルの確認

mknmz コマンドに「-C」オプションを付けて、設定ファイルの確認を行います。
> /usr/local/bin/mknmz -f /home/user/namazu/mknmzrc -C
	
  mknmz コマンドを実行します。
   -f:設定ファイルの指定
   -C:設定ファイルの確認
	

読み込んだ設定ファイル: /home/user/namazu/mknmzrc
システム: linux
Namazu: 2.0.16
Perl: 5.006001
File-MMagic: 1.26
NKF: /usr/bin/nkf
KAKASI: /usr/bin/kakasi -ieuc -oeuc -w
茶筌: no
和布蕪: no
わかち書き: /usr/bin/kakasi -ieuc -oeuc -w
メッセージの言語: ja_JP.eucJP
言語: ja_JP.eucJP
文字コード: euc
CONFDIR: /usr/local/etc/namazu
LIBDIR: /usr/local/share/namazu/pl
FILTERDIR: /usr/local/share/namazu/filter
TEMPLATEDIR: /usr/local/share/namazu/template
対応メディアタイプ:   (19)
未対応メディアタイプ: (25) 必要ツールが $path にないものには (-) を表示
- application/excel: excel.pl
  application/gnumeric: gnumeric.pl
  application/ichitaro5: taro56.pl
  application/ichitaro6: taro56.pl
- application/ichitaro7: taro7_10.pl

〜 以下略

3.実行

Namazu を使用して検索を行います。 検索するためには、まずインデックスを作成しなければいけません。
インデックスの作成は cron などを使用して、定期的に再構築しましょう。

(1)インデックスの作成

mknmz コマンドで、検索インデックスを作成します。
> mkdir /home/user/namazu/index ※インデックス用ディレクトリを作成します。
> mkdir /home/user/namazu/template ※テンプレート用ディレクトリを作成します。

> /usr/local/bin/mknmz -f /home/user/namazu/mknmzrc -O /home/user/namazu/index /home/www
	
  mknmz コマンドを実行して、/home/www 配下の検索インデックスを作成します。
   -f:設定ファイルの指定
   -O:インデックスの出力先
	

検索対象のファイルを調べています...
2000個のファイルがインデックス作成の対象として見つかりました

〜 略 〜

インデックスを書き出しています...
[基本]
日付:                Wed Apr 12 10:36:13 2006
追加された文書の数:  1,837
サイズ (bytes):      17,042,160
合計の文書数:        1,837
追加キーワード数:    48,900
合計キーワード数:    48,900
わかち書き:          /usr/bin/kakasi -ieuc -oeuc -w
経過時間 (秒):       4,626
ファイル/秒:         0.40
システム:            linux
Perl:                5.006001

Namazu:              2.0.16

(2)コマンドでの検索

インデックス作成後は、検索が可能になります。 検索は namazu コマンドで行います。
> /usr/local/bin/namazu -f /home/user/namazu/namazurc シグマ会計
	
  namazu コマンドを実行して、「シグマ会計」を検索します。
   -f:設定ファイルの指定
	
検索結果

参考ヒット数:  {  [ シグマ: 30 ]  [ 会計: 100 ]  :: 30 }

検索式にマッチする 30 個の文書が見つかりました。

〜 略 〜

現在のリスト: 1 - 20

(3)namazu.cgi での検索

ホームページからコンテンツを検索する場合は、namazu.cgi を使用します。
namazu.cgi は /usr/local/libexec 配下にインストールされていますので、 ホームページからCGIを実行できるディレクトリにコピーします。
> cp /usr/local/libexec/namazu.cgi /home/www/cgi-bin
CGI では namazurc の設定ファイルの場所を指定できませんので、 namazu.cgi と同一ディレクトリに 「.namazurc」というファイルを設置します。 内容は /home/user/namazu/namazurc と同じですので、コピーしても良いのですが、 設定変更後のコピー忘れ防止のため、シンボリックリンクで対応します。
> ln -s /home/user/namazu/namazurc /home/www/cgi-bin/.namazurc

・テンプレートの編集

インデックスが作成されると、インデックス用のディレクトリに 「NMZ.xxxxx.ja」という日本語用のテンプレートファイルが作成されています。 このままでも問題はありませんが、編集して検索結果の見映えを良くしてみましょう。 インデックス用ディレクトリのテンプレートファイルは、 次回のインデックス作成時に上書きされてしまいますので、 「NMZ.xxxxx.ja」をテンプレート用ディレクトリにコピーします。
> cp /home/user/namazu/index/NMZ.*.ja /home/user/namazu/template
また、namazu.cgi を呼び出す HTMLファイル のサンプルを 以下のように作成することができます。
cat NMZ.head.ja NMZ.body.ja NMZ.foot.ja > sample.html
次に、テンプレート用ディレクトリの「NMZ.xxxxx.ja」ファイルを編集します。 各テンプレートは、それぞれ以下のような部品になっていますので、 好きなフォントや色に変更してみてください。
NMZ.head.ja 検索結果のヘッダー部分
<html> 〜 <body> の開始まで
NMZ.body.ja 検索式の説明
検索条件が設定されていない時などに表示されます。
NMZ.foot.ja 検索結果のフッター部分
</body>と</html>の部分
NMZ.tips.ja 検索のコツ
検索結果が存在しなかった場合などに表示されます。
NMZ.result.normal.ja
NMZ.result.short.ja
検索結果のレイアウト
標準版と簡潔版が存在します。

・namazu.cgi の呼び出し

namazu.cgi を呼び出す HTML を編集します。
上記のように作成した sample.html をもとに、パラメータを設定します。
<form action="/cgi-bin/namazu.cgi" method="post">
<input type="text" name="query" size="40">
<input type="submit" name="submit" value="検索">
<input type="hidden" name="lang" value="ja">     ※日本語で表示する。
<input type="hidden" name="reference" value="off">  ※参考ヒット数を表示しない。
<input type="hidden" name="whence" value="0">    ※最初の検索結果から表示する。
<input type="hidden" name="max" value="20">     ※表示件数を1ページ20件にする。
<input type="hidden" name="result" value="normal">  ※表示形式を標準にする。
<input type="hidden" name="sort" value="score">   ※スコア順でソートする。
</form>
2006.04.12 Kazuhito Usui