line-01
line_glay
  Welcome!  page:rdbms/namazu
  odic.ne.jp library 日本語全文検索システム Namazu
  by:大阪演劇情報センター+未知座小劇場                          更新日:
line_glay
top
top

 Namazu

  1. インストールと前提・RPMパッケージ編
  2. 設定・RPMパッケージ編
  3. indexの作成・RPMパッケージ編
  4. Webからの利用・RPMパッケージ編
  5. 追記
  6. Tips
  7. 参考図書・URL
  8. indexの更新
  9. Turbolinux 8 Serverへのインストール
  10. クライアントごとの全文検索namazu

[  はじめに ]

コンピュータ上のプログラムが動くか、動かないかは、この文字の「くか、かない」の二三文字の差など、また肯定と否定という概念の対極の幅など遠く及ばず、パソコンに向かうあなたに不可視の幅として、重くのしかかってくるはずだ。またときには、大きな不快と、理不尽な絵にもいえぬ闇が、ストレスとして雪崩のように押し寄せたかとおもうと、諦念の情がわたしの隣にそっと佇んだりもする。最後にはフーッツと大きくため息を吐くのだ。
一日ですめばいい。躓くのだからそんなことはめったにあるはずがない。経験がそう教える。二三日が四五日になる。そしてそして……。頼るのが、この世で最も難解な(と思われる)、決まって不親切な(と思われる)マニアル本だけとなると、嵐の夜に、羅針盤なしで荒海に櫓を漕ぐの図で、人生を嘆くのに似るだろう。
さて、急に動く。いつもこうだ。予感などあったものではない。感動は積み重ねられた結果に訪れるが、可能性の消去作業に脈絡があろうはずもなく、瞬間は音もなく通りすぎる。数日間の苦労は呆気楽観の中で行き場を失う。
このときSFSエンタープライズのピカード艦長なら、ライカ副長に向かってこういう。
「問題は解決したが、疑問ばかりが残った。やりきれんよ」
同感である。ともあれ、悩むなら、まず動いた上で物事を悩みたいものである。

[  インストールと前提・RPMパッケージ編 ]

Namazuは、GNU一般公有使用許諾書のバージョン2に従うフリーソフトです。これを「なまず」と読み、日本語全文検索システムと説明されている。一つのデータベースシステムといえるだろう。余談だが、わたしはここで、初めて「分かち書き=形態素解析」という言葉に出会う。
実は半年ほど前、導入を試みたことがある。あらかた使用できるようになるまでにはなったが、細部の詰めが思うに任せずそのままになっていた。今回サーバ機を変えての挑戦になったのは、こちらの状況が煮詰まったと判断したからだ。実際には、トップページをみていただければおわかりのように、使用可能となっている。
導入事例の報告となるが、やはり詳しくは全文検索システム Namazuのホームぺージをみて貰うのが一番だろう。

Namazuのホームぺージへ

さて、ここでは実際に使用可能な状態までの説明となる。例によってわたしの整理でもある。説明は大きく二つに分かれる。server設定部分とクライアント部分だ。まとめていえば、Namazuが稼働し、クライアントの /~下で使用可能となるまでとなる。複数インデックスの利用方も含める。
前提条件だが、ApacheでCGIが使用可能なこと。もう一つはNamazuがインストールされていること。
インストールされていること、とは少々ふざけたいい口だろうが、それはこういう次第だ。前回のNamazu導入試行時はNamazuの稼働に必要な様々なソースを、各方面からダウンロードして頂き、インストールした。しかし今回はすべての条件は整い、必要なソースはインストールされている、ということを前提にしたい。
前回わたしが使用したLinuxディストリビューションはインストールされていなかったが、最新のTurboLinux、RedHat、MiracleLinuxなどの各ディストリビューションにはすでにNamazu環境は組み込まれている。ディストリビューションをインストールすれば利用可能な状態である。これはRPMパッケージによるインストール済ということになる。ソースのtar展開によるmake、インストール と異なるので、わたしがここで報告する意味もあるかと思う。実地はMiracleLinuxで行った。
また、ここではコマンドラインからのNamazuの検索利用ではなくWebからの利用を前提とする。

[  設定・RPMパッケージ編  ]

Namazuを、わたしは現在次のように理解している。インデクサ作成の「mknmz」と検索を行う「namazu」。現状はそれぞれ、

mknmz -C

と、

nmazu -C

のコマンドで調べることができる。「mknmz」の設定ファイルは「mknmzrc」、「namazu」の設定ファイルは「nmazurc」である。
たとえば、

mknmz -a -O /var/namazu/index/tako /home/tako/public_html

と、コマンドをうてば「/var/namazu/index/tako」下に「/home/tako/public_html」の各種インデックス「NMZ.*」が作成される。このインデックスを「namazu」が「namazu.cgi」を使って、検索文字列を検索する、となるのだろう。これらは「mknmzrc」と「namazurc」の設定に従って実行される。
各種設定書類と関係ディレクトリの在処を箇条書きしておこう。あくまでもわたしの環境下で、RPMインストールの場合である。
具体条件は、アカウント「tako」が「/home/tako」に設定することにする。
Namazuの設定書類は「/etc/namazu」内にある「mknmzrc」と「namazurc」である。ここにあらかじめある。以下に全文を引用する。この「mknmzrc」と「namazurc」がサーバ全体の挙動を規定する。

namazurc
mknmzrc

上記、「mknmzrc」と「namazurc」をあなたのホームディレクトリ下にコピーする。次にこの「mknmzrc」と「namazurc」のファイル名を「.mknmzrc」と「.namazurc」に変える。わたしの場合だと「/home/tako/.namazurc」と「/home/akiraka/.mknmzrc」となるわけだ。上記全文引用の内容は、これら.(ドット)ファイルの内容と考えて頂きたい。
これらの内容が繁栄されているかどうかは「$namazu -C」と「$mknmz-C」のコマンドで確認できる。老婆心ながら「.mknmzrc」と「.namazurc」のパーミッションは644、所有者は「tako」である。「/etc/namazu」内にある「mknmzrc」と「namazurc」と「/home/tako/.namazurc」、「/home/tako/.mknmzrc」の関係は、先に「/etc/namazu」内にある「mknmzrc」と「namazurc」が読み込まれ、それに「/home/tako/.namazurc」、「/home/tako/.mknmzrc」が上書きされる形で読み込まれる、ようになっているらしい。
「namazu.cgi」はApacheのDocumentRootである 「/home/httpd/html内」のcgi-binディレクトリーにすでにある。これをコピーして使う。
わたしの場合は、「/home/tako/public_html/cgi-bin」とした。ここに「/home/httpd/html/cgi-bin/namazu.cgi」をコピーする。パーミッションは755、所有者は「tako」。もちろんApacheでCGIが利用可能となっていなければならない。

[  indexの作成・RPMパッケージ編  ]

設定が終わったのでindexの作成となる。書籍でいえば索引にあたる部分と考えていいだろう。注意書き風に綴ればこうだ。

1,/var/namazu/index内にtakoというディレクトリを作成。
1,パーミッションは755、所有者は「tako」。
1,.namazurcファイルでIndex /var/namazu/index/takoと指定しておくこと。
1,index作成コマンドは $mknmz -a -O /var/namazu/index/tako /home/tako/public_html(-Oは英字大文字のオー)
1,このコマンドの意味は、少々強引だが/home/tako/public_html下のすべてを対象に/var/namazu/index/tako内にindexを作成するということだろう。

さて、indexディレクトリがなぜ「/var/namazu/index」なのかということだが、これには根拠がない。あらかじめここに作成されてある。なら、これを利用させてもらおうというだけである。.namazurcの設定で他所の利用も可能かと思うが、これは試していない。

[  Webからの利用・RPMパッケージ編  ]

Webからの利用とはこのようなことを想定している。アカウント「tako」は「/home/tako/public_html」でホームページを公開している。多くの人がアクセスするだろう。このときアカウント「tako」のホームページはNamazuで検索できる。
それでは「/var/namazu/index/tako」内の「NMZ.head.jp」をviなどで開き、下記部を変更、追加する。

<--
<li><input type="checkbox" name="idxname" value="foo">foo
<li><input type="checkbox" name="idxname" value="bar">bar
<li><input type="checkbox" name="idxname" value="bar">baz
-->

を、

<li><input type="checkbox" name="idxname" value="tako">tako
<li><input type="checkbox" name="idxname" value="foo">foo
<li><input type="checkbox" name="idxname" value="bar">bar
<li><input type="checkbox" name="idxname" value="bar">baz

と書き改めて保存。これは「index/tako」に対するチェックボックスを追加作成したことになる。
検索は可能となった。ブラウザで、

http://www.xxxx.ne.jp/~tako/cgi-bin/nanazu.cgi

と、Namazu検索画面を呼び出し、検索文字を入れ、「tako」にチェックを入れ検索するということになる。いかがだろうか、検索文字列がURLとともに列挙されただろうか。目的のURLをクリックすればそのページにジャンプすることになる。
使い勝手を良くしてみよう。
このように考えてもらいたい。先ほどはブラウザのURL記入欄に記入し「namazu.cgi」を呼び出したが、わざわざ呼び出すのではなく検索欄を任意のxxxx.htmlに埋め込み、検索ボタンのクリックで検索後の「namazu.cgi」ページにジャンプする、ということにしたい。つまりはこのinfo.dic.ne.jpのトップページと同じ仕様である。
ここではトップページの「index.html」に書き込むことにする。

<html>
<body>

<form method="GET" action="/cgi-bin/namazu.cgi">
<font size="2">
サイト内の検索は、空欄に検索文字を入れてクリックして下さい。全文検索システムは<br>
<strong><a href="http://www.namazu.org/">Namazu</a> v2.0.4</strong>です。<br>
<font size="+0">
<input type="TXST" name="key" size="40">
</font>
<input type="submit" name="submit" value="  検索  ">
<input type="reset" name="reset" value=" reset ">
<input type="HIDDEN" name="whence" value="0">
<input type="checkbox" name="dbname" value="tako" checked>info
</font>
</form>

</body>
</html>


とりあえず上記のタグと文だけで検索のための入力欄はできるだろう。だが、このようなhtmlファイルがあるだけでは、URLで「namazu.cgi」を呼び出すのと変わらない。ここでの意図はわざわざ、「namazu.cgi」を呼び出さずに、使い勝手をよくすることであった。従って<body>〜</body>の間をどこに埋め込むかである。これは使われる人の使い勝手というほかない。一つの例とし てこのサイトのトップページがある。

わたしは上記に絡み、一つ細工をした。
このような場合が考えられる。「/var/namazu/index/tako」内の各種NMZ.*ファイルを更新するため、ある日

$ mknmz -a -O /var/namazu/index/tako /home/tako/public_html

を行ったとしよう。するとここで再び1,のNMZ.head.jpをviなどで開き書き換えるという作業を行わなければならない。更新があまりないならこの作業も億劫でないだろうが、更新が定期的なものであればそうもいかない。
さて「/home/tako/.mknmzrc」の一行に「Template/usr/share/namazu/template」がある。これは「/var/namazu/index/tako」内に作成される各種NMZ.*ファイルの基ネタと考えてもらいたい。従ってこれを改竄すれば、作成される「NMZ.head.jp」に反映される。しかしこの結果、Namazu利用アカウント数ほど、チェックボックスができることになる、ということはあり得る。この対処はどうするのか?今のところ、わからないのが実状。対処法があればお教え願いたいと思う。
ついでに今ひとつ。この問題はハードディスク全体を一つのindexとする場合は考えなくていいだろう。複数のindexを作るときの問題だ。
『全文検索・データベースWebの作り方』の77ページにこうある。

「NMZ.hrad(NMZ.head.jp)にファイルの件数やインデックスの更新日が入っています。混乱を防ぐために、テンプレートととして使う場合は、この箇所を削除した方がよいでしょう」

とある。結論からいえば、わたしはこれを削除した。
<!--
現在、<!-- FILE --> 89 <!-- FILE --> の文書がインデックス化され、
<!-- KEY --> 9,169 <!-- KEY --> 個のキーワードが登録されています。
</p>
<p>
<strong>インデックスの最終更新日: <!-- DATE --> 2001-10-21 <!-- DATE --></strong>
-->
NMZ.head.jpの上記の部分を削除した。このことにより、インデックス数やインデックスの最終更新日が表記されなかったことを解消した。複数のindexを作らない場合は、インデックス数やインデックスの最終更新日が表記されていた。
こうして緊急避難の状況である。一連のこの現象を理解できていない。当然、『全文検索・データベースWebの作り方?戮?77ページの引用文の真意が分かっていない。これもまた、何かうまい手ががあればお教え願いたいと思う。

[   追記   ]

取りあえず動いているということでの報告である。ソースを読み込んでの報告ではない。?泙拭∪瀋蠅離廛蹈札垢?root権限のいる作業もあるかと思う。その場合は管理権限者にご相談されるようにとお願いしたい。今後、使い込みながらの報告ができればと希求する。たとえばPHPファイルの認識のさせ方は、わたしは今のところApacheの設定で切り抜けている。またPDFファイルの扱い、MLのindex化など具体化したいと 思っている。(2001.10.21)

[  Tips  ]

[namazurcでする設定について]
/etc/namazurcの話であるのでクライアント設定ではなく、server設定でのことになる。この/etc/namazurc中に次の箇所がある。

## Replace /home/foo/public_html/ http://www.foobar.jp/~foo/
## Replace /home/(.*)/public_html/ http://www.foobar.jp/\1/
## Replace /C\|/foo/ http://www.foobar.jp/
##
## If you do not want to do the processing on command line use,
## run namazu with -U option.
##
Replace /home/tako/public_html http://www.xxxx.ne.jp/~tako/
Replace /home/(.*)/public_html/ http://www.foobar.jp/~\1/
#Replace /home/foo/public_html/ http://www.foo.bar.jp/~foo/

この箇所は、検索結果のファイルの所在をURLに置き換える設定である。なお「\」は逆スラッシュに置き換えてほしい。「##Replace /home/(.*)/public_html/http://www.foobar.jp/\1/」はサンプルである。「*」はワイルドカードなのでこのReplace設定で各クライアントのURLが/~*となるので、クライアントごとにURL設定をしなくてもいいということになる。だから上記の「Replace /home/tako/public_html http://www.xxxx.ne.jp/~tako/」行は不要となるが、念のために記載しているにすぎない。しかし「Replace/home/(.*)/public_html/ http://www.foobar.jp/\1/」ではうまくURLに置換できなかった。そこで「Replace /home/(.*)/public_html/ http://www.foobar.jp/~\1/」と「~」チルダを挿入してみた。この「~」の挿入で置換できるようになったのだが、なぜだか分からない。Apacheの設定がおかしいのか、また他の理由によるものなのか?取りあえずわたしのserver環境では今のところ問題はないようだ。

[  参考図書・URL  ]

列記し謝意とします。『日本語全文検索システムの構築と活用』は新版がでていました。
  • 『日本語全文検索システムの構築と活用』著/馬場肇 刊/ソフトバンク
  • 『全文検索・データベースWebの作り方』著/西村めぐみ 刊/ソシム
  • ITNAVI.com http://www.itnavi.com/namazu.htm

  • [  indexの更新 ](2002.04.02)

    indexの自動更新は以下のスクリプトを作成して行うようにした。
    #!/bin/sh
    /usr/bin/mknmz -a -O /var/namazu/index/tako /home/tako/public_html (-Oは英字大文字のオー)
    一時間ごとに更新するには 「/etc/cron.hourly」、一日ごとであれば「 /etc/cron.daily 」に、スクリプトファイルに名前を付けて置けばいい。後は 「/etc/clontab 」ファイルの設定に従って実行される。なお実行ファイルなのでパーミッションは700。
    更新の報告がmailで送られてくる。以下はその例である。

    [  追記 ](2006.04.04)
    indexの自動更新で、登録したくないディレクトリが出てきたので、どうしたものかとインターネット上で調べてみた。上記スクリプトを以下のように変更して自動更新をおこなった。問題なく行っているので以下にそのスクリプトを記載します。

    #!/bin/sh
    export LANG=ja_JP.eucJP
    export PEAL_BADLANG=0
    mknmz -a -O /var/namazu/index/tako /home/tako/public_html --exclude="(pass|data|xxxx|cgi-bin)" >> /var/log/mknmz.log

    ここでの「pass|data|xxxx|cgi-bin」が登録をしないディレクトリとなる。また「/var/log/mknmz.log」は手作業で「echo」したものです。パーミションは600。(2006.04.04)

    [  追記 ](2006.04.18)
    上記でlogが排出されるようになるが、このログファイルのlogrotateを行うこととした。/etc/logrotate.d内に以下のファイルを置いた。
          /etc/logrotate/namazu

    /var/log/mknmz.log {
    weekly
    notifempty
    missingok
    create 0600 root
    rotate 4
    }


    この指示書で、ローテイトを行うようになった。細部の意味は割愛します。(2006.04.18)

    [ 失敗例mail  ]

    mknmz 2.0.4, an indexer of Namazu.
    
    Usage: mknmz [options] <target>...
    
    Target files:
      -a, --all                target all files.
      -t, --media-type=MTYPE   set the media type for all target files to MTYPE.
      -h, --mailnews           same as --media-type='message/rfc822'
          --mhonarc            same as --media-type='text/html; x-type=mhonarc'
      -F, --target-list=FILE   load FILE which contains a list of target files.
          --allow=PATTERN      set PATTERN for file names which should be allowed.
          --deny=PATTERN       set PATTERN for file names which should be denied.
          --exclude=PATTERN    set PATTERN for pathnames which should be excluded.
      -e, --robots             exclude HTML files containing
                               <meta name="ROBOTS" content="NOINDEX">
      -M, --meta               handle HTML meta tags for field-specified search.
      -r, --replace=CODE       set CODE for replacing URI.
          --html-split         split an HTML file with <a name="..."> anchors.
          --mtime=NUM          limit by mtime just like find(1)'s -mtime option.
                               e.g., -50 for recent 50 days, +50 for older than 50.
    
    Morphological Analysis:
      -c, --use-chasen         use ChaSen for analyzing Japanese.
      -k, --use-kakasi         use KAKASI for analyzing Japanese.
      -m, --use-chasen-noun    use ChaSen for extracting only nouns.
    
    Text Operations:
      -E, --no-edge-symbol     remove symbols on edge of word.
      -G, --no-okurigana       remove Okurigana in word.
      -H, --no-hiragana        ignore words consist of Hiragana only.
      -K, --no-symbol          remove symbols.
    
    Summarization:
      -U, --no-encode-uri      do not encode URI.
      -x, --no-heading-summary do not make summary with HTML's headings.
    
    Index Construction:
          --update=INDEX       set INDEX for updating.
      -Y, --no-delete          do not detect removed documents.
      -Z, --no-update          do not detect update and deleted documents.
    
    Miscellaneous:
      -s, --checkpoint         turn on the checkpoint mechanism.
      -C, --show-config        show the current configuration.
      -f, --config=FILE        use FILE as a config file.
      -I, --include=FILE       include your customization FILE.
      -O, --output-dir=DIR     set DIR to output the index.
      -T, --template-dir=DIR   set DIR having NMZ.{head,foot,body}.*.
      -q, --quiet              suppress status messages during execution.
      -v, --version            show the version of namazu and exit.
      -V, --verbose            be verbose.
          --debug              be debug mode.
          --help               show this help and exit.
    
    Report bugs to <bug-namazu@namazu.org>.
    

    [ 成功例mail  ]

    10 files are found to be indexed.
    1/10 - /home/tako/public_html/tako/xxxxx
    		/d_ether/ETHER.EBK may be a BINARY file! skipped.
    1/9 - /home/tako/public_html/tako/xxxxx
    		/d_ether/Ether.sea may be a BINARY file! skipped.
    1/8 - /home/tako/public_html/tako/xxxxx
    		/d_ether/Ether.zip Unsupported media type (application/x-zip) skipped.
    1/7 - /home/tako/public_html/tako/xxxxx
    		/d_ether/FINDER.DAT may be a BINARY file! skipped.
    1/6 - /home/tako/public_html/tako/xxxxx
    		/d_ether/img/FINDER.DAT may be a BINARY file! skipped.
    1/5 - /home/tako/public_html/tako
    		/index.html.flc Unsupported media type (application/x-elc) skipped.
    1/4 - /home/tako/public_html/tako
    		/top/%252fAppleDouble/%252fParent may be a BINARY file! skipped.
    1/3 - /home/tako/public_html/cgi-bin/namazu.cgi may be a BINARY file! skipped.
    1/2 - /home/tako/public_html/data/doun.exe may be a BINARY file! skipped.
    1/1 - /home/tako/public_html/data/odic.data01.exe may be a BINARY file! skipped.
    [Append]
    Date:                Tue Apr  2 0x:0x:03 2xx2
    Total Documents:     4x8
    Total Keywords:      4x,xx1
    Wakati:              module_kakasi -ieuc -oeuc -w
    Time (sec):          2
    File/Sec:            0.00
    System:              linux
    Perl:                5.xxxx3
    Namazu:              2.0.4
    (02.02.01)
    

    [  Turbolinux 8 Server・RPMパッケージ編  ]

    Turbolinux 8 ServerにはデフォルトでNamazuはない。Turbolinux 8 Workstationにはある。そこで、

    ftp://ftp.turbolinux.co.jp/pub/TurboLinux/TurboLinux/ia32/Workstation/8/install/

    から以下を頂いてくることにした。

    1. kakasi-2.3.2-2.i586.rpm
    2. namazu-2.0.12-1.i586.rpm
    3. namazu-devel-2.0.12-1.i586.rpm
    4. perl-File-MMagic-1.13.1.noarch.rpm //このrpmはTurbolinux 7 Serve には用意されていた

    インストールすれば終りである。現状で機能しているのでよしとしている。不具合があれば追ってお知らせしたい。(02.11.29)

    [  クライアントごとの全文検索Namazu  ]

    「/home/ユーザ/public_html」をNamazuで検索できるようにしてみよう。

    # cp /etc/namazu/namazurc /home/ユーザ/.namazurc
    # cp /etc/namazu/namazurc /home/ユーザ/.mknmzrc
    $ mkdir /home/ユーザ/mynamazu

    所有者をユーザに変えておく。
    「mynamazu」はインデックスを置くディレクトリである。
    この二つのドットファイルは「/etc/namazu/*」を上書きして設定として読み込まれる。次のコマンドで詳細がわかる。

    $ namazu -f /home/ユーザ/.namazurc -C

    次は「/home/ユーザ/public_html」下にcgi-binディレクトリを作成する。

    $ cd public_html
    $ mkdir cgi-bin
    $ cp /home/ユーザ/.namazurc /home/ユーザ/public_html/cgi-bin
    # cp /var/www/cgi-bin/namazu.cgi /home/ユーザ/public_html/cgi-bin

    Apacheのアクセス設定で「/home/ユーザ/public_html/cgi-bin」をCGIの使用を可能にしておく。
    インデックスの作成である。

    $ mknmz -a -O /home/ユーザ/mynamazu /home/ユーザ/public_html

    インデックスができたのでこれを利用するHTMLファイルを作成する。

    $ cd /home/ユーザ/mynamazu
    $ cat NMZ.head.ja NMZ.body.ja NMZ.foot.ja > /home/ユーザ/public_html/search.html

    「search.html」を開き 「/home/ユーザ/public_html/cgi-bin/namazu.cgi」を利用できるようにパスを通しておく。
    また「/home/ユーザ/public_html/cgi-bin/.namazurc」のIndexとReplaceも書き換えておく。

    Index /home/ユーザ/mynamazu
    Replace /home/ユーザ/public_html http://www.xxxx.ne.jp/~ユーザ/

    としてブラウザから「search.html」にアクセスして検索してみよう。

    (文責・k)


     topへ  home:topへ  server library:topへ