>> HOME >> FC5 MENU >> 全文検索システム (Namazu)
キーワードを入力してサーバー内のコンテンツを検索することができるようにします。
Namazu は手軽に使えることを第一に目指した、非常に高速な日本語全文検索システムです。
なお、サイト内の全ファイルを検索できるページのほかに、サイト内の特定ディレクトリ内のファイルのみ検索できるページを後々作成できるように、インデックスに名前(idxname)を付けます。(ここでは、idxname = www とします)

前提としては・・・
検索対象のWebコンテンツは /var/www/html/
検索用インデックスファイルの格納場所は /var/lib/namazu/index/www

1. Namazu のインストール
1 ) Namazu のインストール
2 ) インデックス作成で必要な kakasi-dict のインストール
2. Namazu の設定
1 ) mknmz スクリプト設定ファイル の編集
2 ) mknmz スクリプトファイル の編集
3 ) namazu コマンド設定ファイル の編集
3. Namazu の実行
1 ) インデックスファイル作成先ディレクトリの作成
2 ) インデックスファイルの作成
3 ) 検索の試行
4 ) 文書の更新・削除に伴うインデックスの掃除
4. Webページ上から Namazu を利用する
1 ) namazu-cgi のインストール
2 ) namazu-cgi の設定
3 ) namazu-cgi の実行
5. Namazu インデックスファイル作成の自動化
1 ) mknmz 実行スクリプトの作成
2 ) スケジューラ(cron)への登録
7. 検索結果ページのデザインの変更
1. Namazu のインストール
1 ) Namazu のインストール
[root@linux ~]# yum -y install namazu 
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
extras                                                               [1/3]
updates                                                              [2/3]
core                                                                 [3/3]
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for namazu to pack into transaction set.
namazu-2.0.15-3.fc5.i386. 100% |=========================|  19 kB    00:00
---> Package namazu.i386 0:2.0.15-3.fc5 set to be updated
--> Running transaction check
--> Processing Dependency: perl(File::MMagic) for package: namazu
--> Processing Dependency: perl-File-MMagic >= 1.12 for package: namazu
--> Processing Dependency: perl-Text-Kakasi >= 1.00 for package: namazu
--> Processing Dependency: kakasi >= 2.3.0 for package: namazu
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for perl-Text-Kakasi to pack into transaction set.
perl-Text-Kakasi-2.04-2.f 100% |=========================| 5.6 kB    00:00
---> Package perl-Text-Kakasi.i386 0:2.04-2.fc5 set to be updated
---> Downloading header for perl-File-MMagic to pack into transaction set.
perl-File-MMagic-1.26-1.n 100% |=========================| 3.5 kB    00:00
---> Package perl-File-MMagic.noarch 0:1.26-1 set to be updated
---> Downloading header for kakasi to pack into transaction set.
kakasi-2.3.4-21.fc5.i386. 100% |=========================| 6.3 kB    00:00
---> Package kakasi.i386 0:2.3.4-21.fc5 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 namazu                  i386       2.0.15-3.fc5     extras            394 k
Installing for dependencies:
 kakasi                  i386       2.3.4-21.fc5     extras             76 k
 perl-File-MMagic        noarch     1.26-1           core               29 k
 perl-Text-Kakasi        i386       2.04-2.fc5       extras             30 k

Transaction Summary
=============================================================================
Install      4 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
Total download size: 529 k
Downloading Packages:
(1/4): namazu-2.0.15-3.fc 100% |=========================| 394 kB    00:01
(2/4): perl-Text-Kakasi-2 100% |=========================|  30 kB    00:00
(3/4): perl-File-MMagic-1 100% |=========================|  29 kB    00:00
(4/4): kakasi-2.3.4-21.fc 100% |=========================|  76 kB    00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: kakasi                       ######################### [1/4]
  Installing: perl-Text-Kakasi             ######################### [2/4]
  Installing: perl-File-MMagic             ######################### [3/4]
  Installing: namazu                       ######################### [4/4]

Installed: namazu.i386 0:2.0.15-3.fc5
Dependency Installed: kakasi.i386 0:2.3.4-21.fc5 perl-File-MMagic.noarch 0:1.26-1 perl-Text-Kakasi.i386
0:2.04-2.fc5
Complete!
2 ) インデックス作成で必要な kakasi-dict のインストール
[root@linux ~]# yum -y install kakasi-dict 
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
extras                                                               [1/3]
updates                                                              [2/3]
core                                                                 [3/3]
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for kakasi-dict to pack into transaction set.
kakasi-dict-2.3.4-21.fc5. 100% |=========================| 3.8 kB    00:00
---> Package kakasi-dict.i386 0:2.3.4-21.fc5 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 kakasi-dict             i386       2.3.4-21.fc5     extras            904 k

Transaction Summary
=============================================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
Total download size: 904 k
Downloading Packages:
(1/1): kakasi-dict-2.3.4- 100% |=========================| 904 kB    00:02
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: kakasi-dict                  ######################### [1/1]

Installed: kakasi-dict.i386 0:2.3.4-21.fc5
Complete!
2. Namazu の設定
1 ) mknmz スクリプト設定ファイル の編集
mknmz スクリプトは、検索を高速化する "インデックスファイル" を作成するコマンドです。
[root@linux ~]# vi /etc/namazu/mknmzrc 

  :
  :
#
# 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
# 以下を追加(HTMLファイルを検索対象にする)
$ALLOW_FILE = ".*\\.(?:$HTML_SUFFIX)";

#
# 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|cgi|pl|log|dat|txt|css)" .
             "|.*\\.tar\\.gz|core|.*\\.bak|.*~|\\..*|\x23.*";

  :
  :
# 特定のディレクトリを検索対象から除外したい場合、以下を追加
# 例: /var/www/html/himitsu/、/var/www/html/dummy/ を除外
$EXCLUDE_PATH ="/var/www/html/himitsu/.*|/var/www/html/dummy/.*"

  :
  :
2 ) mknmz スクリプトファイル の編集
[root@linux ~]# vi /usr/bin/mknmz 

# 先頭の /usr/bin/perl -w の "-w" を削除
#! /usr/bin/perl
# -*- Perl -*-
# mknmz - indexer of Namazu
# $Id: mknmz.in,v 1.85.4.77 2006/01/24 12:57:04 opengl2772 Exp $
#
# Copyright (C) 1997-1999 Satoru Takabayashi All rights reserved.
# Copyright (C) 2000-2006 Namazu Project All rights reserved.
#     This is free software with ABSOLUTELY NO WARRANTY.
  :
  :
3 ) namazu コマンド設定ファイル の編集
namazu は、インデックスファイルをもとにキーワードの検索を行うコマンドです。
[root@linux ~]# vi /etc/namazu/namazurc 

  :
  :
##
## 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  /var/www/html/   http://mountainbigroad.jp/

  :
  :
##
## 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
# 以下を追加
Lang          ja_JP.eucJP

  :
  :
3. Namazu の実行
1 ) インデックスファイル作成先ディレクトリの作成
例として、/var/www/html/ のインデックスファイルを /var/lib/namazu/index/www に作成します。
[root@linux ~]# mkdir /var/lib/namazu/index/www 
2 ) インデックスファイルの作成
インデックスファイルを作成するには、mknmz コマンドを使用します。
mknmz コマンドのオプションについては、全文検索システム Namazu 説明書 を参照してください。
[root@linux ~]# mknmz /var/www/html -O /var/lib/namazu/index/www -K 
検索対象のファイルを調べています...
1個のファイルがインデックス作成の対象として見つかりました
1/1 - /var/www/html/index.html [text/html]
インデックスを書き出しています...
[基本]
日付:                Sat Jul 15 01:18:15 2006
追加された文書の数:  1
サイズ (bytes):      254
合計の文書数:        1
追加キーワード数:    6
合計キーワード数:    10
わかち書き:          module_kakasi -ieuc -oeuc -w
経過時間 (秒):       2
ファイル/秒:         1.00
システム:            linux
Perl:                5.008008

Namazu:              2.0.15
3 ) 検索の試行
[root@linux ~]# namazu 日本語 /var/lib/namazu/index/www 
検索結果

参考ヒット数: [ 日本語: 1 ]

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

1. TEST (スコア: 2)
著者: 不明
日付: Sat, 15 Jul 2006 01:17:57 +0900
TEST 日本語全文検索システム なまず namazu
http://mountainbigroad.jp/index.html (254 bytes)




現在のリスト: 1 - 1
4 ) 文書の更新・削除に伴うインデックスの掃除
検索文書に更新・削除があった場合、インデックスから登録済の文書を更新・削除するのではなく、欠番情報を記録することによって実現されています。つまり、インデックスに記録された元の情報はそのままで、単にその文書の IDが欠番になったという情報を記録するだけです。
したがって、文書の更新/削除を含むインデックスの更新を繰り返していくと欠番が増えてインデックスの記録効率が悪くなっていきます。そのときは gcnmz を使ってゴミ掃除をします。
[root@linux ~]# gcnmz --no-backup --verbose /var/lib/namazu/index/www 
processing NMZ.{t,r,field}
2/3 (/var/www/html/Word.doc) deleted
processing NMZ.{i,w}
0/17 (doc) deleted
9/17 (word) deleted
10/17 (word.doc) deleted
processing NMZ.p
3681/65536 deleted
30382/65536 deleted
41922/65536 deleted
4. Webページ上から Namazu を利用する
1 ) namazu-cgi のインストール
Webページ上から Namazu を利用するための CGI(namazu.cgi) をインストールします
[root@linux ~]# yum -y install namazu-cgi 
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
extras                                                               [1/3]
extras                    100% |=========================| 1.1 kB    00:00
updates                                                              [2/3]
updates                   100% |=========================|  951 B    00:00
core                                                                 [3/3]
core                      100% |=========================| 1.1 kB    00:00
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for namazu-cgi to pack into transaction set.
namazu-cgi-2.0.15-3.fc5.i 100% |=========================| 6.3 kB    00:00
---> Package namazu-cgi.i386 0:2.0.15-3.fc5 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 namazu-cgi              i386       2.0.15-3.fc5     extras             29 k

Transaction Summary
=============================================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
Total download size: 29 k
Downloading Packages:
(1/1): namazu-cgi-2.0.15- 100% |=========================|  29 kB    00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: namazu-cgi                   ######################### [1/1]

Installed: namazu-cgi.i386 0:2.0.15-3.fc5
Complete!
2 ) namazu-cgi の設定
namazu.cgi 検索結果ページヘッダファイル /var/lib/namazu/index/www/NMZ.head.ja を編集し、文字化けの対策や、インデックス名の設定を施します。
[root@linux ~]# vi /var/lib/namazu/index/www/NMZ.head.ja 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
# 追加(文字化け対処)
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<!-- LINK-REV-MADE -->
<link rev="made" href="mailto:webmaster@hammer1.fedora.redhat.com">
<!-- LINK-REV-MADE -->
<title>Namazu: a Full-Text Search Engine</title>
<style type="text/css"><!--
  strong.keyword { color: Red; }
  p.example      { text-indent: 1em;
                   color: Navy;
                   font-weight: bold;
                   font-family: monospace; }
  code           { color: Navy;
                   font-family: monospace; }
  code.example   { color: Navy;
                   font-weight: bold;
                   font-family: monospace; }
  code.operator  { color: Navy;
                   font-family: monospace;
                   font-weight: bold; }
--></style>
</head>
  :
  :
<strong>検索式:</strong>
<input type="text" name="query" size="40">
<input type="submit" name="submit" value="Search!">
<input type="hidden" name="whence" value="0">
# 変更
<!-- <input type="hidden" name="idxname" value="foobar"> -->
<input type="hidden" name="idxname" value="www">
# 変更
<!-- <a href="{cgi}">[検索方法]</a> -->
<a href="{cgi}?idxname=www">[検索方法]</a>
</p>
<p>
<strong>表示件数:</strong>
  :
  :
3 ) namazu-cgi の実行
http://mountainbigroad.jp/cgi-bin/namazu.cgi?idxname=www にアクセスして、以下のような画面が表示されることを確認します。
Namazu: a Full-Text Search Engine
5. Namazu インデックスファイル作成の自動化
1 ) mknmz 実行スクリプトの作成
[root@linux ~]# vi mknmz_www.sh 

#!/bin/sh

/usr/bin/mknmz /var/www/html -O /var/lib/namazu/index/www -K
/usr/bin/gcnmz --no-backup --verbose /var/lib/namazu/index/www
[root@linux ~]# chmod 700 mknmz_www.sh 
2 ) スケジューラ(cron)への登録
[root@linux ~]# crontab -e 

# 毎日 01:00 に mknmz 実行
0 1 * * * /root/mknmz_www.sh > /dev/null 2>&1
6. 検索結果ページのデザインの変更
namazu-cgi による検索結果は、以下のファイルを編集することによって、デザインを自由に変更することができます。
変更箇所編集ファイル
ヘッダ部/var/lib/namazu/index/www/NMZ.head.ja
フッタ部/var/lib/namazu/index/www/NMZ.foot.ja
検索結果部(標準版)/var/lib/namazu/index/www/NMZ.result.normal.ja
検索結果部(簡潔版)/var/lib/namazu/index/www/NMZ.result.short.ja
検索方法部/var/lib/namazu/index/www/NMZ.body.ja
検索ヒント部/var/lib/namazu/index/www/NMZ.tips.ja