Software Design 1997年8月号に掲載された記事

このページの無断転載・引用を禁じます。
(C) Copyright 1997,2001 Hajime BABA. All right reserved.

原稿公開の経緯

Software Design 1997年8月号に、 freeWAIS-sfとSFgateを用いた全文検索システム構築に関する記事 を書く機会がありました。 そこで、SD編集部の許可を得て、この記事原稿をwebページ上で公開させて頂 くことにしました。公開にあたり、快く許可を頂いたSD編集部の担当の方に感 受します。

以下に示すドキュメントは、SD編集部に提出した記事原稿に対してタグ付けな どの簡単な処理を施したものです。錫際に雑誌に掲載されている記事は、細か い言葉づかいや表記などが編集時に書き直されていますので、このドキュメン トとは厳密には異なります。もちろん、内容的には変わるところはありません。

補注

雑誌掲載分に、編集時のミスによる欠落が一部ありました。該当部分は、 TCP wrapper のインストールと /etc/hosts.allow, hosts.deny の編集部分の 間で、

==== 欠落ここから ====
TCP wrapper のインストールが済んだら、/usr/local/bin/waisserver を 
waisserver.d という名前で $REAL_DAEMON_DIR にコピーします。そして、
/etc/inetd.conf を編集します(リスト9)。先ほど 
/usr/local/bin/waisserver と指定していたところを /usr/sbin/tcpdと
書き換えるだけです。

[リスト9] /etc/inetd.conf の設定を変更
==== 8< ====
  z3950	stream	tcp	nowait	root	/usr/sbin/tcpd \
    waisserver.d -d /usr/local/lib/wais-sources -e /var/log/waislog -l 5
==== 8< ====
==== 欠落ここまで ====

のようになっています。 このように /etc/inetd.conf を編集しないと、kill -HUP PID してもうまく アクセス制限ができないことになります。大抵の人はすぐに気が付くことでは ありますが、やはり分からない人には分からないでしょう。 この件に関しては、次号に訂正記事が載ることになっています。素早い対応を 打ってくださった担当の方々に感謝します。

雑誌掲載記事の送付原稿

以下が記事原稿の本体です。 ご意見やご感想等あれば、お気軽にお知らせ頂ければ幸いです。

      インターネット/イントラネットでの全文検索システム構築
	--- freeWAIS-sfとSFgateを用いたシステム構築例 ---

			     馬場 肇
		   京都大学理学部宇宙物理学教室
	       E-mail: baba@kusastro.kyoto-u.ac.jp


1. はじめに

インターネット上において、情報を効率的に得るために現在広く利用され
ているサービスに、サーチエンジンと呼ばれるものがあります。これは、
インターネット全体からロボットを使って集めたコンテンツ(主にHTMLファ
イル)をインデックス化して、全文検索サービスを提供しているものです。

さて、こうしたサーチエンジンのシステムの内部で使われている要素技術、
すなわち全文検索システムソフトウェアは、そのままイントラネットなど
に応用することが可能です。

特に、一般のオフィスで扱うデータの約8割はテキスト情報だと言われて
います。したがって、イントラネットに全文検索システムを導入すれば、
大した手幾を掛けることなく必要な情報を的確かつ短時間に引き出すこと
ができるようになると期待されます。

インターネット/イントラネットの別を問わず、文書の量が増大するにつ
れて「どこに何があるのかわからない」という状態に陥ってしまった経験
をお持ちの方は多いことでしょう。全文検索システムは、このような状態
になっているこれまでのデータ管理の手襦に新しいパラダイムをもたらす
可能性を秘めていると言えます。


ところで、現在流通している商用の検索エンジンソフトウェアは数十万円
から数百万円します。これでは錫際に導入してみたいとおもっても、気軽
に試してみるといったことができません。ですので、フリーソフトウェア
で構築できる全文検索システムが欲しいという要求が出てくるのは自然の
成り行きと言えます。幸いなことに、この一年の間に日本語の通るフリー
の全文検索ソフトウェアで錫迹紵に使えるものがいくつか登場してきまし
た。これらを有効に活用しない手はありません。

そこで、この稿では、「ローカルシステム上のHTMLファイルを検索対象と
して、WWWからCGI経由で検索できるような全文検索システムを、フリーソ
フトウェアを使って構築すること」を例題として取り上げます。また、全
文検索システムの要素技術とシステム構築に必要な基礎的知識についても
簡単に解説し、本格的な運用をする場合の注意点についても述べます。

この例を理解すれば、応用を効かせたシステムを構築することはインター
ネット/イントラネットの区別なく簡単なはずです。例えば、

・イントラネット内部文書の全文検索システムを構築する
・メーリングリストあるいはNetNewsのログアーカイブを全文検索できる
  ようにする

のような応用が考えられます。また、こうしたフリーソフトを使って有用
な検索システムを構築しているところも既にたくさんあります。読儒の皆
さんは、この簡単な例を参考にして、それぞれに工夫して有用な検索サー
ビスを提供できるようにして下さい。





2. 全文検索システムについて

2.1 全文検索システムの基本構成

全文検索システムの基本的な構成については、例えば本誌1997年4月号な
どで解説されています。詳しくはそちらや参考文献をご覧頂くことにして、
ここでは簡単にまとめてみるにとどめておきます。

「全文検索システム」と一口に言うことが多いですが、それは錫際には様々
の機能を持つプログラムの集合体です。これを機能別に分類すると、

・リソース収集部
・文書フィルタ部
・インデクサ
・検索エンジン部
・検索クライアント部

などの部分に分けることができます。ただし、ここではローカルのテキス
トデータを対象にしているので、リソース収集部と文書フィルタについて
は考えないことにします。

このような単純化したモデルで考えると、検索システムの構築作業は次の
ような形に還元されます。まず、ローカルサーバのデータを使って、イン
デクサでデータベース(インデックス)をあらかじめ作成しておきます。そ
うしておいて、錫際の運用段階では、検索クライアントからの検索要求に
対して、検索サーバはそのインデックスを使って検索した結果をクライア
ントに返し、クライアントはその結果を表示するというサイクルを繰り返
すことになります。

現在の全文検索系ソフトウェアは、基本的に全てこのような形式に乗っ取っ
ています。インデックスファイルの形式や検索クライアントとサーバとの
通信方式の違いなどによって種々のソフトウェアの違いが現れることにな
るのです。



2.2 WAIS とは

WAIS (Wide Area Information Servers) (『ウェイズ』と読みます)は、
分散環境において蓄積された情報の検索とその入手を円滑に行なうために
開発された、クライアント-サーバモデルに基づいて構築されたネットワー
クサービスの一つです。WAIS は1980年代後半から開発されていたプロト
コルであり、その歴史はWWWなどよりも古いものです。WAIS では、Z39.50 
と呼ばれる検索プロトコルを利用して情報の検索を行ないます。

WAIS は、特にサイズの小さなファイルが大量に存在する環境において、
大規模な全文文書検索システムを構築するのに向いています。また、
WAIS では、検索結果に対してスコアを付けることで、目的の文書かどう
かを判断することができるようになっています。このスコアが高ければ高
いほど錫鵠した検索にぴったりのドキュメントであることを意味します。
スコアの決定には、単純な単語出現回数だけではなく、さまざまの細かな
評価を行なっています。

WAISでは、waisindex というプログラムを用いてインデックスを作成しま
す。そして、waisserver というプログラムがデーモンプロセスとして検
索サーバとして動作します。



2.3 freeWAIS-sf とは

freeWAIS-sf は、Ulrich Pfeifer 氏によって開発されたフリーの WAISパッ
ケージです。現在のバージョンは2.1.2です。また、SFgateはfreeWAIS-sf
用のCGIインターフェースで、WAISクライアントとして動作します。現在
のバージョンは5.111です。

この組合せの場合を2.1節で述べた構成で説明すると、図1に示すように
waisindex がインデクサ、waisserver が検索サーバに対応することにな
ります。

[図1] freeWAIS-sf と SFgate の組合せの場合のシステム構成

==== 8< ====

                   +--------------+   +--------------+
                   | 文書ファイル |   | HTMLファイル |
                   +--------------+   +--------------+
                            ↓            ↓
                          +------------------+
                          |    インデクサ    |
                          |    (waisindex)   |
                          +------------------+
                                   ↓
  +--------------+        +------------------+
  | 検索エンジン |→→→→|   インデックス   |
  | (waisserver) |←←←←|  (データベース)  |
  +--------------+        +------------------+
     ↑      ↓
  +--------------+
  |   検索CGI    |
  |   (SFgate)   |
  +--------------+
     ↑      ↓
  +--------------+
  |   WWWサーバ  |
  +--------------+
     ↑      ↓
  +--------------+
  |   ユーザー   |
  +--------------+

==== 8< ====


この稿では、これらに日本語化パッチを当てたものを検索サーバとして利
用することにします。freeWAIS-sf用の日本語化パッチは現在二種釵存在
するのですが、ここではKAKASI-2.2.5を使用するものの方で説明すること
にします。この日本語化パッチを当てたものは、大抵のOSで動作確認が行
なわれていますので問題は少ないでしょう。





3. インストール

以下では、

  Linux-2.0.30 + gcc-2.7.2.1 + libc-5.3.12 + Apache-1.2beta10

というシステムを利用して作業を行ないました。ディレクトリ名の一部に
システム依存の部分がありますので、錫際の設定の際には適時読み替えて
下さい。httpd はすでにインストールされているものとして話を進めます。

また、インストールについては少し長くなるので、紙面の都合上ここでは
簡単に説明するにとどめておきます。詳しくは日本語化パッチのドキュメ
ントを参照して下さい。


3.1 必要なソフトウェアの入手

  ftp://ftp.kusastro.kyoto-u.ac.jp/pub/baba/wais/

以下に、

  freeWAIS-sf-2.1.2.tar.gz
  kakasi-2.2.5.tar.gz
  kakasidict-940620.gz
  SFgate-5.1/SFgate-5.111.tar.gz
  SFgate-5.1/Wais-2.118.tar.gz

と、日本語化パッチの 2.1.2-jp6.tar.gz を用意してありますので、それ
ぞれ取羸します。

[リスト1] 必要なソフトウェアのリスト
==== 8< ====
-rw-r--r--  1 baba     general     54216 May 29 06:59 2.1.2-jp6.tar.gz
-rw-r--r--  1 baba     general    927623 Oct 23  1996 freeWAIS-sf-2.1.2.tar.gz
-rw-r--r--  1 baba     general     47644 Jul 24  1996 kakasi-2.2.5.tar.gz
-rw-r--r--  1 baba     general    873656 Jul 24  1996 kakasidict.940620.gz
-rw-r--r--  1 baba     general    367361 Apr 23 14:48 SFgate-5.1/SFgate-5.111.tar.gz
-rw-r--r--  1 baba     general     46019 Mar 13 22:20 SFgate-5.1/Wais-2.118.tar.gz
==== 8< ====

またこの他に、freeWAIS-sfのコンパイル時にGNU flexを要求しますし、
錫鵠時にはnkfが必要です。また、SFgateはPerl-5 (特にPerl-5.003以上
が望ましい)とjcode.plを必要としますので、これらのソフトウェアにつ
いてもあらかじめインストールしておいて下さい。



3.2 freeWAIS-sf のインストール

インストールは KAKASI -> freeWAIS-sf の順で行ないます。コンパイル
はgccで行なって下さい。基本的には、KAKASI のインストールは、パッチ
を当ててからmake; make installとするだけです。freeWAIS-sf のインス
トールもパッチを当ててからconfigure; make; make install とするだけ
ですが、configure の際にいくつかの釈趙に答える必要があります。

また、make の最後で正常に動作しているかのテストを行なうのですが、
パッチを当てたことによってスコアの計算方法が若干襃わったために、
  BOOLEAN, FIELD, COMPLEX, LITERAL, PROXIMITY, GERMAN
のテストは失敗してしまいます。GERMANは日本語化のため、PROXIMITYは
configure時のオプションに依るため、その他はオリジナルパッチをあて
たために依るものです。ですので、この点は気にしなくても大丈夫です。


インストールが済んだら、/etc/servicesにリスト2のようなエントリを登
録します。
\footnote{Slackware-3.1ではデフォルトでエントリが用意されています。}
ポート番号210はZ39.50が予約している番号です。

[リスト2] /etc/services に以下のエントリを追加
==== 8< ====
  z3950   210/tcp         wais            # NISO Z39.50 database
==== 8< ====


次に、waisserver を inetd経由で起動するように /etc/inetd.conf をリ
スト3のように編集し、inetd に HUPシグナルを送ります。

[リスト3] /etc/inetd.confに以下のエントリを追加
==== 8< ====
  z3950	stream	tcp	nowait	root	/usr/local/bin/waisserver \
    waisserver.d -d /usr/local/lib/wais-sources -e /var/log/waislog -l 5
==== 8< ====


ここまで設定した段階で、正しく設定できているかどうかを、telnet で
ポート 210 を直接叩いて接続するかどうかで確認します。

  % telnet localhost z3950
  Trying 127.0.0.1...
  Connected to sabrina.kusastro.kyoto-u.ac.jp
  Escape character is '^]'.

となれば成功です。Ctrl-], quit で終了して下さい。この際、waislog に

  6245: 0: Dec 10 06:21:30 1996: 1: Accepted connection from: \
    localhost [127.0.0.1], freeWAIS-sf 2.1 PL 2 (Japanized)
  6245: 1: Dec 10 06:21:33 1996: 2: Done handling client

のようなログが残っているとおもいます。もし、

  % telnet localhost z3950
  Trying 127.0.0.1...
  telnet: connect to address 127.0.0.1: Connection refused
  % 

のようになった場合は、waisserver が反応していないことを示します。
設定を見直して下さい。



3.3 SFgate のインストール

SFgateは錫鵠時にPerlモジュールのWais-2.118を必要としますので、先に
これをインストールします。インストールは大体 README 通りです。

次にSFgate本体をインストールします。これも基本的に ./configure;
make; make install の三段論法ですが、freeWAIS-sfと同じくconfigure 
の際にいくつかの釈趙に答える必要があります。

最後に、httpd の srm.conf で CGI が錫鵠できるような設定になってい
るかどうかを確認します。これでインストールは完了です。





4. 設定

4.1 インデックスの作成

ここでは、ローカルファイルシステム上の/usr/local/etc/httpd/htdocs/ 
以下の全てのHTMLファイルをインデックスするというケースを考えます。
インデックスの大きさは、大体コンテンツの大きさと同じくらいですが、
1.5-2倍程度に膨らむこともありますので、インデックスを置くファイル
システムの容量に注意して下さい。以下では、インデックスを作成して置
いておくディレクトリを /usr/local/lib/wais-sources とします。

まず、インデックスの前準備として、リスト4のようにフォーマットファ
イル /usr/local/lib/wais-sources/mydb.fmt を用意します。このファイ
ルはインデックスの際に必要となるファイルです。この場合、HTMLファイ
ルの<TITLE>タグに囲まれた部分がインデックスのタイトルになります。

[リスト4]  HTML用サンプルフォーマットファイル mydb.fmt
==== 8< ====
record-sep: /\n\n/ # never matches

layout:
headline: /<[Tt][Ii][Tt][Ll][Ee]>/ /<\/[Tt][Ii][Tt][Ll][Ee]>/ 80
  /<[Tt][Ii][Tt][Ll][Ee]> */
end:

region: /<[Hh][Tt][Mm][Ll]>/
  stemming TEXT GLOBAL
end: /<.[Bb][Oo][Dd][Yy]>/
==== 8< ====


錫際にインデックスを作るのはwaisindexなのですが、waisindex にはた
くさんのオプションがあるので、コマンドラインから引数を指定する時に
間違えがちです。そこで、freeWAIS-sf附属ユーティリティのmakedb を使っ
てインデックスを作成することにします。

/usr/local/lib/wais-sources/makedb.conf をリスト5のように編集しま
す。この場合、$wwwroot 以下の全てのHTMLファイルをfindコマンドを使っ
て抽出しています。また、waisindexに渡す引数として、-japanese オプ
ションと、-t fields によってリスト4のフォーマットファイルを使うこ
とを示し、-t URL $wwwroot http://www.hoge.co.jp引数によって、検索
結果として返す値として、ファイルのフルパスではなく、URLを返すよう
に設定します。

[リスト5] 設定ファイル makedb.conf
==== 8< ====
# makedb.conf -- makedb configuration file

# [Global options]
dbdir     = /usr/local/lib/wais-sources
waisindex = /usr/local/bin/waisindex
wais_opt  = -japanese
limit     = 10                     # 10 dead files maximum

# User defined variables
wwwroot   = /usr/local/etc/httpd/htdocs

# [Databases options]
database  = mydb
files     = `find $wwwroot -name \*.html -print`
options   = -t fields -t URL $wwwroot http://www.hoge.co.jp

# EOF
==== 8< ====

ここまで準備が済ませておいて、

  % makedb -update mydb

とします。すると、makedb から waisindex が呼ばれてインデックスが作
られます。これには多少時間がかかります。参考までに数値を挙げると、
6500ファイル(約40MB)のHTMLファイルを Linux on Pentium/120MHz with
64MB memory でインデックスすると、約35分かかりました。

これで 

mydb.cat, mydb.dct, mydb.doc, mydb.fn, mydb.hl, mydb.inv, mydb.src

の7種釵のファイルができます(リスト6)。これらがセットになって一つの
インデックスとして機能します。

[リスト6] ls -lF の結果
==== 8< ====
baba@sango/usr/local/lib/wais-sources[1]% ls -lF mydb.*
-rw-r--r--   1 baba     users         336 Jun  4 10:17 mydb.cat
-rw-r--r--   1 baba     users       29033 Jun  4 10:17 mydb.dct
-rw-r--r--   1 baba     users          77 Jun  4 10:17 mydb.doc
-rw-r--r--   1 baba     users         113 Jun  4 10:17 mydb.fn
-rw-r--r--   1 baba     users          97 Jun  4 10:17 mydb.hl
-rw-r--r--   1 baba     users        2318 Jun  4 10:17 mydb.inv
-rw-r--r--   1 baba     users         396 Jun  4 10:17 mydb.src
==== 8< ====



4.2 検索ページの編集

次に、検索ページをHTMLの<FORM>タグを用いて編集します。簡単なサンプ
ルとして、図2の検索画面のHTMLファイルをリスト7に示しておきます。ま
た、SFgateには数多くのオプションがあります。SFgate のドキュメント
に附属している index.html や demo.html が参考になりますので、錫際
に使用する際にはリスト7と併せて適当に編集して下さい。

[図2] 検索画面

[リスト7] 図2のHTMLソース
==== 8< ====
<!-- -*-Mode: html-helper; -*- -->

<!-- 注意: 漢字コードを EUC にして保存して下さい -->

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html> <head>
<meta http-equiv="Content-Type" content="text/html; charset=x-euc-jp">
<title>SFgate 5.111: Query Sample</title>
<link rev="made" href="mailto:baba@kusastro.kyoto-u.ac.jp">
</head>

<body bgcolor="#FFFFFF" link="#0000FF" vlink="#551A8B">
<a href="http:/SFgate/SFgate.html">
<img src="http:/SFgate/SFgate.gif" alt="SFgate">
</a>
<h1>freeWAIS-sf + SFgate で構築した<br>検索システムの例</h1>
<hr>

<form method="GET" action="http:/cgi-bin/SFgate">

データベースを選択して下さい:<br>
<input name="database" type="checkbox" checked value="localhost/mydb">
サンプルデータベース <b>"localhost/mydb"</b><br>
<input name="database" type="checkbox" value="www.foo.co.jp:8000/mydb2">
サンプルデータベース <b>"www.foo.co.jp:8000/mydb2"</b><br>
<!--
value には、"データベースホスト名[:ポート番号]/データベース名"のように
指定します。この場合は、localhost の mydb というデータベースに、
デフォルトのポート番号 210 でアクセスすることを示しています。
"www.foo.co.jp:8000/mydb2" のように、ポート番号を指定することもできます。
-->
<p>

検索文字列を入力して下さい (日本語も可能です):<br>
<input type="TEXT" name="text" size=30><br>
<input type="submit" value="[Search]">検索開始
<input type="reset"  value="[Reset]">リセット

<input type="hidden" name="application" value="mydb">
<input type="hidden" name="range" value="1">
<input type="hidden" name="maxhits" value="20">
<input type="hidden" name="requestm" value="GET">

</form>

<hr>
</body> </html>

<!-- Local Variables: -->
<!-- file-coding-system: *euc-japan*unix -->
<!-- End: -->
==== 8< ====


錫際に検索語を入力して検索した結果を図3と図4に示します。

[図3] 結果画面
[図4] 閲覧画面


とりあえず、これで当初の目的であるWWW経由の検索ができるようになっ
たはずです。




5 アクセス制御について

5.1 アクセス制御の重要性

freeWAIS-sf には、アクセス制御の機能がありません。これは、外部から
ポート210番でアクセスされて自由にインデックス情報を引き出されるこ
とを意味します。本格的に運用する際には、外部に知られては困るような
文書をインデックスする場合もあるでしょうから、これでは困ることにな
ります。それではアクセス制御はどのように行なえば良いのでしょうか。

一つには、WWW(CGIクライアント)経由で使う場合には、httpd のアクセス
制御を使うと言う解が考えられます。間接的ではありますが、これを使う
だけでも簡易的な防御にはなるはずです。あるいは、ポート番号を210番
以外にして運用するという解もあります。しかし、いずれの方法でも、な
んらかの手竓によってホスト名とポート番号が知られてしまうと、データ
ベースにアクセスされてしまうことになりますので、本釈紵な解決になり
ません。

従って、何らかの方法でWAISサーバ自身に対してアクセス制御を行なわな
ければなりません。インターネットからの不正アクセスを念頭に置いた場
合、これには二通りの対処法が考えられます。

  1. ファイアウォールの中にWAISサーバを構築する。
  2. WAISサーバとなるホストに TCP wrapper や xinetd などのラッパー
     あるいはスーパーデーモンを仕掛けてポート210番を監視する。

1. の場合でファイアウォールホストの対策がきちんとなされている場合
は、ほとんど何も考える必要はありません。外部に対してポート210番を
素通しにするファイアウォール管理儒がいるとはおもえないからです。そ
こで、ここでは 2. の場合について説明します。



5.2 TCP wrapper の設定

TCP wrapper は、inetd と各種デーモンの間に介在するような形の「ラッ
パー」と呼ばれる種釵のプログラムです。これを使うと、inetd経由で起
動されるネットワークサービスについて、通常不可能なアクセス制御やア
クセス記録を取ることができるようになります。ここでは、これを使って、
waisserver のアクセス制御を行なう例を示します。

TCP wrapper の現在のバージョンは 7.6 です。

  ftp://ftp.aist-nara.ac.jp/pub/Security/tool/tcp_wrappers/tcp_wrappers_7.6.tar.gz

などから入手できます。これはセキュリティに関するプログラムですので、
信頼できるAnonymous FTPサイトからの入手を特にお勧めします。
\footnote{Slackware-3.1 のシステムでは、最初から TCP wrappers がイ
ンストールされていたのですが、バージョンが古いので(いくつかわから
なかったですが、古いことだけは確かです)、この際入れ換えてしまうと
言うのでも良いでしょう。}

インストールの手順をリスト8に簡単に示します。ソースを展開したらま
ずREADMEを良く読んで下さい。そして、必要ならばMakefile を編集して
下さい。特にREAL_DAEMON_DIRはOSに依存しますので注意して下さい。

[リスト8] TCP wrapper のインストール
==== 8< ====
  % zcat tcp_wrappers_7.6.tar.gz | (cd /usr/local/src; tar xvf -)
  % cd /usr/local/src/tcp_wrappers_7.6
  % make REAL_DAEMON_DIR=/usr/sbin linux
  % su
  # cp tcpd /usr/sbin
  # cp tcpdchk tcpdmatch safe_finger /usr/local/etc
==== 8< ====


TCP wrapper のインストールが済んだら、/usr/local/bin/waisserver を 
waisserver.d という名前で $REAL_DAEMON_DIR にコピーします。そして、
/etc/inetd.conf を編集します(リスト9)。先ほど 
/usr/local/bin/waisserver と指定していたところを /usr/sbin/tcpdと書き
換えるだけです。

[リスト9] /etc/inetd.conf の設定を変更
==== 8< ====
  z3950	stream	tcp	nowait	root	/usr/sbin/tcpd \
    waisserver.d -d /usr/local/lib/wais-sources -e /var/log/waislog -l 5
==== 8< ====


次に、/etc/hosts.allow, /etc/hosts.deny を編集します(リスト10)。詳
しい書式については hosts_access(5) を参照して下さい。
\footnote{これらのファイルの書式のチェックは tcpdchk で、またアク
セス制限がうまくいっているかどうかのテストは tcpdmatch で行なうこ
とができます。}
ここでは最も簡単な例だけを示します。この例の場合、waisserver.d に
対するアクセス権を、localhost と130.54.52/24 のホストからのみに許
可し、その他のアドレスからのアクセスを拒否するように設定しています。

[リスト10] /etc/hosts.allow と /etc/hosts.deny の設定
==== 8< ====
% cat /etc/hosts.allow
waisserver.d: LOCAL 130.54.52.0/255.255.255.0

% cat /etc/hosts.deny
waisserver.d: ALL
==== 8< ====


そうして、inetd に HUP シグナルを送って /etc/inetd.conf の変更を
反映させれば設定は終了です。


内部のホスト(例えばsango.kusastro.kyoto-u.ac.jp)からwaisserver.d 
へのアクセスが成功した時は、

May 29 18:18:31 sabrina waisserver.d[1928]: connect from sango.kusastro.kyoto-u.ac.jp

のようなログを残します。
\footnote{書き出されるログファイルは /etc/syslog.conf の設定によっ
て異なります。}

また、外部のホスト(例えば130.54.111.11)からのアクセスを拒否した時
には、

May 29 18:20:06 sabrina waisserver.d[1934]: refused connect from 130.54.111.11

のようなログを残します。

これで、WAISサーバのアクセス制御ができるようになりました。

この稿はセキュリティについての解説ではありませんので、TCP wrapper 
の設定の説明はこの辺りで止めておきます。より詳しいことを知りたい方
は参考文献をご覧下さい。




6. その他

6.1 インデックス作成の方針

錫際にインデックスを作成する場合には、ある特定の分野に焦点を絞って
インデックス化することを心がけるようにした方が良いでしょう。コンテ
ンツの分野が広い場合は、複数のインデックスを作れば良いのです。そう
することでそれぞれに品釈の高いソースを作成することができます。ただ、
細分化し過ぎると逆に使い勝手が悪くなるので注意して下さい。

錫際にSFgateなどで検索する場合には、チェックボタンなどを使ってユー
ザがいくつかのインデックスを選択できるようにしておきます。このよう
にしておくと、ユーザーサイドからすれば選択の幅が広がったことになり、
サーバ管理の面から言ってもメンテナンスの見通しが良くなります。

また、インデックスする文書についてですが、通常のシンプルテキストを
単純にインデックスするだけでも充蟐に威力を発揮するのですが、
hypermailやMHonArcといったHTML変換コンバータを利用してHTMLに変換し
てからインデックスするようにすると、文書のクロスリファレンス性が高
まり、結果としてインデックスの価値がより上がります。一例として、相
互に関連している二つのメーリングリスト(Linux-Users-MLと
MkLinux-jp-ML)の過去記事の検索システムを、

  http://wais.kusastro.kyoto-u.ac.jp/ml/linux-users/search.html

で運用していますので、どうぞご覧下さい。特にこの例では、WAISインデッ
クスそのものは二つのサイトに別々に分散しており、インデックス管理主
体も完全に分散しています。ところが、SFgateで両方のインデックスを指
定して検索した場合、検索式は両方のインデックスに送られ、検索結果は
マージされて表示されます。この例はWAISによる広域分散データベースシ
ステムの特徴を生かしていると言えます。



6.2 その他のフリーの全文検索ソフトウェア

freeWAIS-sfとSFgateの組合せは、性能的に言って商用製品に全く引けを
取らない優秀なソフトウェアなのですが、インストールと設定にかなりの
手幾がかかることが難点と言えば難点です(作業手順そのものは全て簡単
だとおもいます)。またソースコードもかなり巨大で、気軽に改造してみ
ると言ったことができにくいのも難点の一つです。

そこで、これとは対照的なコンセプトを持った検索ソフトウェアに SSE 
というものがあります。SSEは、WWWで利用することを想定して開発された、
インデクサと検索CGIプログラムのセットです。ソニー(株)が著作権を持
ち、GPL1で配布されるフリーソフトウェアになっています。現在のバージョ
ンは1.1です。

  http://www.sony.co.jp/Search/download-j.html

から入手できます。

WAISと同様に、AND/OR/NOT/()を用いた論理演算ができます。Perlで書か
れており、ソースコードが短いのが特徴で、全体でも1800行に達しません。
このためカスタマイズも容易なのが利点で、freeWAIS-sf では大がかり過
ぎるとおもわれる向きはこちらを試してみることもあるいはお勧めできる
一案かもしれません。設定については割愛しますが、詳細なドキュメント
が付いていますので容易に導入できるでしょう。

フリーの検索エンジンソフトウェアは、事錫上wais-japaneseだけという
状況が長く続き、昨年から最近まではfreeWAIS-sfとSSEがそれに置き換わっ
ていましたが、最近になって他のいくつかのソフトウェアも日本語化され
てきました。これらのフリーソフトウェアと商用ソフトウェアについて、

  http://www.kusastro.kyoto-u.ac.jp/~baba/wais/other-system.html

で簡単なコメント付でまとめて紹介していますので、興味のある向きはど
うぞご覧下さい。



7. 最後に

この一年の間に、日本語の通るフリーの全文検索ソフトウェアで錫迹紵に
使えるものがいくつか登場してきたことは既に述べました。しかし、この
ようなフリーソフトウェアを使った全文検索システムの構築技術は、まだ
まだ広く知られるには至っていません。試しに、現在日本で最大のサーチ
エンジンのGooで「全文検索」というキーワードを入れて検索してみると、
ほとんど全ては既存のサーチエンジンへのポインタ集で、全文検索技術に
ついて書かれたwebページはほんの一握りであることからもわかります。

私は、このようなフリーの検索ソフトウェアを使って有用な検索サービス
を提供するサイトが増えてくることを強く願っています。freeWAIS-sfで
もSSEでも、あるいは他のソフトウェアでも構いません。どれでも良いの
でこれらを使って、全てのWWWサーバのトップページに検索サービスを付
けて欲しいとおもうくらい、全文検索システムが一般的なサービスとして
成長して欲しいとおもうのです。

この稿が、インターネット/イントラネット上に全文検索システムを構築
しようとしている読儒の皆さんの助けになれば幸いです。



A. 参考文献

「WWW サーバ上の検索システム構築」
清水奨
Interface, 1996年7月号

「WAISによる情報発信 (インターネット入門 情報発信編 4)」
村上列
Software Design、1995年2月号

「インターネット・イントラネット対応の検索エンジンを解剖する」
干場信之、清兼義弘
Software Design、1997年4月号

「転ばぬ先のセキュリティ 24、TCP wrapper と xinetd」
山本和彦
UNIX Magazine 1996年6月号

「検索エンジンの選び方」
月刊イントラネット、1997年7月号

「イントラネット対応が進む全文検索システム
  --- 複数サーバーのHTML文書をカバー ---」
日経コンピュータ 1997年3月31日号、

「特集、高速全文検索の威力」
日経バイト 1996年10月号

「インターネット情報提供の新手襦
  --- WWW に検索機能を持たせる ---」
日経コミュニケーションズ、1995年4月17日号

Hajime BABA / 馬場 肇 <baba.hajime@nifty.com>
$Id: index.html,v 1.3 2006/01/18 10:46:20 baba Exp $