3-3. 社内WWWサ−バと全文検索 (1) サ−バ配置ネットワ−ク図 '96 * 各サ−バの配置とクライアント | インタ−ネットへ ----- WWW-A 外部公開用WWW -------- |WWW| DNS1次 |Router| ----- -------- | | ----*---------*---------------------------- nix.co.jj バリアネット | 管理者用のホスト | ------ ------ ------ WWW-B 外部公開用WWWの予備デ−タ |Yobi| |Gate| |Mail| 社内文書共通デ−タ用WWW ------ ------ ------ | | | --------------*--------*------------------- nix.co.jj 内部ネット | | ------- WWW-1 ------- WWW-2 グル−プ専用WWW |Serv1| |Serv2| ------- CAD ------- CAD サ−バ << キ−マン用。 | | ------------- ------------- | | | | | | クライアント << 一般ユ−ザ用。 a1 a2 a3 b1 b2 b3 [ 内部ネットのグル−プ単位の管理 ] 上記の図には Serv1 と Serv2 という2つのグル−プがある。グル−プはCADデ−タを 共有して使う単位である。ホスト Serv2 はホスト b1,b2,b3 におけるCADデ−タの保 管ホストであり、例えば NFS によってアクセスできるようにする。 さらにグル−プ毎に 文書管理のためのWWWサ−バをおく。グル−プにはそれぞれキ−マンをおき、キ−マン がCADデ−タとWWWデ−タを管理することとする。 [ 内部ネットの端末ホストの管理 ] 例えばグル−プ Serv2 にホスト b3 を追加するには、b3 の /etc/hosts にCADと文書 管理のWWWと電子メ−ルサ−バのアドレスを登録する。Serv2,Mail,Yobi である。他の グル−プのCADデ−タにもアクセスしたいなら Serv1 も登録する。 経路制御の設定は Serv2 へのデフォルト経路にする。動的経路制御が簡単であるが常にネットワ−クの設定 を把握できるようにして、トラブルに対処し易くする。 [ WWWサ−バの配置 ] □ WWW-A 各グル−プ毎に文書管理用のWWWサ−バをもち、外部に | 出していい情報を WWW-B にのせる。 しばらくの社内閲覧 ---------------------- 期間を設けた後、外部発信用ホストの WWW-A にデ−タを | コピ−する。これにより WWW-B は WWW-A のバックアップ □ □ WWW-B の働きもさせる。 | | ---------------------- WWW-A,B はユ−ザ master が管理する。 master だけがフ | | ァイル作成消去ができる。WWW-1,2 はユ−ザ keyman が管 □ WWW-1 □ WWW-2 理する。 [ 内部ホストからのインタ−ネットアクセス ] ------ DNS Gate ではIPアドレス変換しているが、別に問題はない。 |Gate| ------ | ホスト c の /etc/resolv.conf ----------*----------- ------------------------------- | |nameserver GateのIPアドレス □ c [ 内部ネットでの電子メ−ルのホスト名管理 ] ------ ホスト c から d に電子メ−ルを送るには、メ−ルサ−バ |Mail| Mailを介して行われる。 c は d のアドレスを知る必要は ------ なく Mail だけでよい。 Mail は全ホストのアドレスを知 | っている必要がある。 ----------*------------ | | c の /etc/hosts Mail の /etc/hosts □ c □ d ---------------- ------------------------- |xxx Mail |メ−ルを送る全部のホスト [ CADデ−タのアクセス ] | | グル−プ Serv2 の例で、 ホスト b1,b2,b3 はお互いにア ------- ------- ドレスを知る必要はない。Serv2 ホストさえ知っていれば |Serv1| CAD |Serv2| CAD よい。b1 が Serv1 にアクセスするのは実装による。とり ------- ------- あえずここまでは考慮しない。 | | -------- -------- b3 の /etc/hosts | | | | ---------------- a1 a2 b1 .. b3 |xxx Serv2 * WWWデ−タのアクセス図 WWW-A WWW-B 社内 Netscape ------------ ------------ アクセス --------------------- |一般公開用| コピ− |一般公開用| *――――― |一般公開用デ−タ | |用デ−タ | <----------- |デ−タ | ――― | 社内文書共通デ−タ| |----------| |----------| | |-------------------| |外部特別ユ| |社内文書 | *―― |部門用非公開デ−タ |___ |−ザ公開用| ----- |共通デ−タ| ---- |部門用公開デ−タ |_ | ------------ | ------------ | ---------------------|| | | || 認証 WWW-2 |リンク WWW-1 || | ------------ | ------------ || |リンク |外部特別ユ| | | 左に同じ | || -------> |−ザ公開用| | | | || |----------| | |----------| || |社内文書 | <--- | 左に同じ | || |共通デ−タ| | | || |----------| |----------| || |部門用公開| |部門用公開| || |デ−タ | |デ−タ | *――― | |----------| |----------| | |部門用非公| |部門用非公| | |開デ−タ | |開デ−タ | *―――― ------------ ------------ ・WWW-A のWWWサ−バ [/usr/nix/www]---[docs]---[public] 一般公開用デ−タ 外部特別ユ−ザ公開用 ・WWW-B のWWWサ−バ [/usr/nix/www]---[docs]---[public] 一般公開用予備デ−タ |-[common] 社内文書共通デ−タ ・WWW-1,2 のWWWサ−バ [/usr/nix/www]---[docs]---[section] 部門用公開デ−タ |-[private] 部門用非公開デ−タ |-[special] 外部特別ユ−ザ公開デ−タ |-[temp] 登録したいデ−タを放り込む場所 共通構造: [/usr/nix/www]---[adm]--- passwd | |-[cgi-bin] |-[logs]------ access,cache,error,proxy |-[cache] |-[docs] * 内部用WWWデ−タの作成 ・先ずは静的なデ−タを対象とし、グル−プウェア的なデ−タは対象としない。グル−プ ウェアはWWWサ−バだけでは実現できない。何らかの専用ソフトがいる。 ・ともかく誰でもいいからWWWサ−バのディレクトリにデ−タを放りこませる。それで ともかくブラウザで、どこからでもデ−タ(ドキュメント)を見れるようにする。 ・グル−プ専用WWWのとりあえずのデ−タは /usr/nix/www/docs/temp に入れることに する。社内文書共通、社外用デ−タの扱いは別途検討の必要があるが。 ・デ−タの整理、インデックスの作成を INDY の dirview によるGUI環境でできるよ うにする。雛型となる index.html はあらかじめ用意しておく。 ・これをキ−マンが定期的にチェックし、共通なデ−タを抜き出し専用ディレクトリを作 ってまとめる。それと同時に HTML で見出しを作る。見出しの index.html ファイルは エディタ−で編集するしかない。これぐらいはキ−マンさんに覚えてもらう。 (2) WWWサ−バ・ホストの設定 '96 * httpd デ−モンの稼働 ( INDY IRIX 5.3 の場合 ) 全てのWWWサ−バにはとりあえず CERN httpd デ−モンを使う。常時稼働とし、ポ−ト 番号はデフォルトの80とする。 % cd /etc/config << root で作業していくこと。 % echo on > cern /etc/init.d/cern << このようにファイルを作成する。 ----------------------------------------------------------- |#! /bin/sh |IS_ON=/etc/chkconfig |if test ! -x $IS_ON ; then | IS_ON=true |fi |if $IS_ON verbose ; then | ECHO=echo |else | ECHO=: |fi |case $1 in | 'start') | if $IS_ON cern | /usr/local/bin/httpd | fi | ;; | 'stop') | ;; 停止するための手続きを記述 |esac % cd /etc/rc2.d % ln -s /etc/init.d/cern S81cern << 81番が空いているとして S81 cern とする。 * WWW-A の設定 ( ホスト WWW ) /etc/httpd.conf ----------------------------------------- |ServerRoot /usr/nix/www |HostName www.nix.co.jj |ServerType StandAlone |Port 80 |UserId nobody |GroupId nogroup | |Protection roule1 { | ServerId TAWASHI << 何でも構わない。 | AuthType Basic << Basic は取り決め。 | PasswdFile /usr/nix/www/adm/passwd | Mask nix << アクセス可能なユ−ザ名を nix とする。 |} |Protect /private/* roule1 | |Exec /cgi-bin/* /usr/nix/www/cgi-bin/* |Pass /* /usr/nix/www/docs/* |Pass http:* << HTTP のみ通すように制限。 | |#AccessLog /usr/nix/www/logs/httpd-log << ログは取らない。 |#ErrorLog /usr/nix/www/logs/httpd-errors << 最初だけエラ−がないかログを |LogFileDateExt log とる。安定したらやめる。 |LogFormat Common |LogTime LocalTime | |#キャッシュの設定 WWWサ−バ間のトラフィックを減らすためキャッシュ機能を使う。 |# キャッシュ期間は1日とする。対象プロトコルは HTTP だけとする。 | |Caching On On <<キャッシュをする。 |CacheRoot /usr/nix/www/cache << キャッシュデ−タをおくディレクトリ。 |CacheSize 10M << キャッシュしておく容量 10 Mbyte。 |CacheClean * 1 days << 1日だけキャッシュする。 |CacheUnused * 1 days << 別に指定しなくてもいいか。 |KeepExpired Off << これも別に指定しなくてもいいか。 |Gc On << ゴミそうじをする。 |GcDailyGc 3:00 << ゴミそうじをする時刻。 | |NoCaching http://xxx.xxx.xx/* << キャッシュしない所があれば設定する。 [ パスワ−ド・ファイルの作成 ] 外部特別ユ−ザ公開用ディレクトリに、アクセスできるユ−ザを制限するための設定する。 ユ−ザ nix のみアクセスできるようにパスワ−ドを設定する。 ブラウザでここをクリッ クすると、アカウント入力画面が出る。ユ−ザ名は nix、パスワ−ドは henomohe を入力 すると中に入ることができる。 # htadm -create passwd << 空のファイル passwd を先ず作る。 # htadm -adduser passwd nix henomohe << ユ−ザ名 nix、パスワ−ド henomohe。 WWW: Real name: nix tarou << 入力要求がある。リタ−ンでもよい。 * WWW-B の設定 ( ホスト Mail ) /etc/httpd.conf ------------------------------- |ServerRoot /usr/nix/www |HostName hostB ※キャッシュはしない。外部公開用WWWの予備であ |ServerType StandAlone り、公開前の確認用でもあるためキャッシュはなし。 |Port 80 |UserId nobody |GroupId nogroup |LogFormat Common |LogTime LocalTime |Exec /cgi-bin/* /usr/nix/www/cgi-bin/* |Pass /* /usr/nix/www/docs/* * WWW-1 の設定 ( ホストServ1, dr0 とする ) /etc/httpd.conf ------------------------------- |ServerRoot /usr/nix/www |HostName Serv1 ※キャッシュの設定は WWW-A と同様。 |ServerType StandAlone |Port 80 |UserId nobody |GroupId nogroup << INDY にはこのIDはない。user ぐらいにする。 |LogFormat Common |LogTime LocalTime | |Protection roule1 { | Mask @( dr0,dr1,dr2,dr3 ) << 自グル−プのホストのみアクセス可とする。dr0,1 |} というのはホスト名である。 |Protect /private/* roule1 |Protect /special/* roule1 << 本当はパスワ−ドによる制限をかける。 | |Exec /cgi-bin/* /usr/nix/www/cgi-bin/* |Pass /* /usr/nix/www/docs/* * ファイル・プロテクション 本設定は管理者が1人でいかに運用管理して行けるかに重点においている。少々のプロテ クションの甘さはいた仕方ない。紳士的な暗黙の了解と、ファイアウォ−ルが頼みである。 グル−プが違ってもキ−マンの owner は keyman で、group は user で同じである。 つ まり keyman でロッグインすれば、どこのグル−プのデ−タでもいじれることになる。こ のファイル・プロテクションは、キ−マンは自部門のグル−プのデ−タのみ扱い、他グル −プのデ−タはいじらないという了解があるということが前提になっている。もう少し厳 しくするにはグル−プ毎に group をかえる。しかし通常のUNIX環境においては、 少 々のプロテクションを施したところで、アクセスは筒抜けである。UNIXを少し知って いる人ならなんとでもなってしまう。 ディレクトリ&ファイル | master.user.other | デ−タの区分 ---------------------------|-------------------|----------------------- WWW-A/../docs/public/ | drwx r_x r_x | 一般公開用デ−タ /public/file | rw_ r__ r__ | /private/ | drwx r_x r_x | 外部特別ユ−ザ公開用 ディレクトリ&ファイル | keyman.user.other | デ−タの区分 ---------------------------|-------------------|----------------------- WWW-B/../docs/public/ | drwx r_x r_x | 一般公開用予備デ−タ /common/ | drwx r_x r_x | 社内文書共通デ−タ | | WWW-1/../docs/section/ | drwx r_x r_x | 部門用公開デ−タ /private/ | drwx r_x ___ | 部門用非公開デ−タ /private/file | rw_ r__ ___ | 注.1) .. は /usr/nix/www/ を示す。 2) ファイルのプロテクションの基本は rw_ r__ r__ とする。 [ 外部特別ユ−ザ公開用 ] 一般公開用デ−タのディレクトリに outer というディレクトリを作成し、 デ−タを入れ ることにする。本当はマウント機能というのを用いて、内部WWWをアクセスできるよう にしたい。しかし CERN にはその機能がないので、同一デ−タを置くことにする。しかし マウント機能で、そもそも果たして安全か疑問も残る。 [ 部門用デ−タの扱い ] キ−マンだけがファイルをおくことができる。とりあえず一般ユ−ザもともかくデ−タを 入れることができるようにする。これには専用のシュル・スクリプトを用意し、キ−マン の権利で ../section/temp ディレクトリにファイル転送するようにする。 非公開デ−タ も同じ扱いとする。 [ 部門用非公開デ−タの注意 ] ファイル・プロテクションだけでは、他グル−プに非公開にはできない。 HTML の記述と WWWのアクセス制限で実現する。より厳しくは group をかえる。 (3) 全文検索ソフトの調査 〜'97/08 * 全文検索ソフトの概要 社内文書管理用のWWWサ−バを立ち上げたら、できればそこから検索もしたいというこ とになる。YAHOO など毎日お世話になっているWWWの検索エンジンの社内用を作るわけ だ。このためには全文検索ソフトを社内WWWに組み込む。一度セットしてしまえば、後 は自動的に全文検索用のインデックスを作成することも可能だ。RDB のようにデ−タベ− ス設計も必要ないし、手作業でインデックスを作成することもない。全文検索システムは 非常に手間いらずなのである。このためイントラネットという言葉が出る以前、YAHOO も ない時から社内の情報検索に使えるのでないかと、一部の間では注目されていた。 96年ぐらいの時は、日本語を扱える全文検索ソフトはフリ−の WAIS と、これを富士通 が製品化したものぐらいしかなかった。 フリ−の WAIS は and 検索もできず、WWWに 組み込むのも容易ではなかった。 通常 xwais というXの画面で、検索するようになって いた。当時のインタ−ネットではWAISサ−ビスはWWWサ−ビスと別個のものとして あった。93年以前から WAIS( Wide Area Information Servers ) は、Z39.50 プロトコ ル、クライアント&サ−バ方式の情報検索サ−ビスとして存在していたのだが。 それから1年経ち、製品も結構たくさんでてきた。96年のなかばには freeWAIS という WAIS に and 検索もできるフリ−ソフトも出ている。しかし全文検索については、あまり 雑誌等で取り上げられていない。市販ソフトは結構高い。なかなかこれがいいという決め 手を探るのが難しかった。 使えるかなと思ったのが、東京の展示会で見た Open Text と いう市販ソフトだった。国立民族博物館で採用されたとか。97年8月に今一度調べ直し た。フリ−ソフトも増え、製品の案内もWWWに結構掲載されていた。何となくようやく、 実際使ってみよかという感じになった。 さて、どのようなソフトがあるかはさておき、実際企業で全文検索ソフトを使うには、ど んなことが求められるか考えてみよう。先ず日本語での HTML と plain-text を扱えるの はもちろんである。下記のことに加え、ファイルの量とインデックスの作成時間も問題に する必要がある。インデックス・デ−タの一部削除ができないと、全部デ−タを最初から 作り直さなければならない。この時間はこれまたやってみないと分からない。それにディ スク容量は、ファイルの全容量の倍は先ず見積もっておく必要がある。インデックスに結 構、ディスクが食われる。まあこれらのことは、最初の内は心配しなくてもいいが。 a. and や or 検索がきること。 b. Word と Excel も扱えること。 c. GIF など画像デ−タは、ファイル名で検索できること。 d. 検索時間はかかっても10秒まで。3秒以下が望ましい。 e. インデックスの追加登録、一部削除ができることが望ましい。 [ 97年8月時点で選ぶとしたら ] フリ−ソフトで選ぶとしたら SSE-1.1 がいいかも知れない。 ただしコンパイルするのに 手間がかかりそうだが。 製品ではオムロンアルファテック(株)の Topic がいいような 気がする。 Netscape Enterprise Server、Microsoft の IIS や Exchange でも採用され てきている。 どうも Topic という名称は SEARCH'97 Information Server と名前を変え ているようである。この他、日本ユニソフトの Co.Co.Da for Web はどうか。評価パッケ −ジを出したり、ドキュメントもWWWで見れるようになっている。値段も手頃だし。 * 全文検索ソフトの市販品 一口に全文検索といっても、いろいろな製品がある。概ねWWWに組み込んで使うタイプ だが、Interleaf のようにDTPソフトに検索機能を付加したものとか。Lotus Notes の 全文検索機能だとか、選択肢が広い。また HTML のみ対象にするとか。 SGML もOKだよ とか。Word や Excel のファイルは、フィルタ−を通して扱えるようにするやり方が多い ようである。Open Text のようにフィルタ−もへったくれもなく、何でも検索対象にして しまうのもある。 最近の動向として、 RDB や ODB のデ−タベ−スソフトと連携する全文検索ソフトが出て きた。SEARCH'97 Information Server と RDB の Oracle や、 ODB の ObjectStore の組 み合わせである。また別なアプロ−チとして、 どうも RDB の中に全文検索機能を組み込 んだ製品も出てきた。RDB の Illustra である。 これには DataBlade という全文検索ソ フトが入っている。RDB にはデ−タがあるのだから、それを活かして全文検索もできるよ うにすれば便利である。デ−タベ−スと全文検索デ−タを別に管理しなくてもすむ。 上記は RDB や ODB を使った広域の分散ファイル検索の話である。これとは別に、個人の パソコンのファイル検索をする製品も各種でてきている。パソコンのハ−ドディスクの容 量は、今では数 Gbyte と非常に大きくなった。外の情報検索ばかりでなく、 個人の情報 自体も検索ツ−ルが必要になりつつあるのだ。このためのソフトには、 "俊司くん" とか QuickFINDER などがある。この2つはまあまあ使えそうだが、他のものはどうも検索時間 が結構かかるみたいである。 ・Co.Co.Da : 日本ユニソフト、Sun,HP,4800,NEWS,Windows 95/NT、50 万円。 for Web Text と HTML 対象。http://cocoda.nuts.or.jp/ に詳しいドキュメン トがある。評価パッケ−ジもある。 ・Open Text : http://www.opentext.com/、INDY 用など。550 万円〜。当初は 800 万円 ぐらいした。対応するファイル形式は非常に多い。 ・俊司 : 言語工学研究所、全文検索エンジン。http://www.mmjp.or.jp/gengo/。 http://www.recruit.co.jp/npon/ で使われている。 ・Topic : 日本語版、米 Verity 社のアルゴリズム。plain-text, HTML 対象。 オムロンアルファテック(株) and or not 検索できる。 SEARCH'97 Information Server と名前を変えたらしい。142 万円から。 http://sdweb.omron-at.co.jp/ ・Microsoft の Index Server : Windows NT 4.0 で稼働。IIS( Internet Information Server ) の一部ということになっている。検索エンジンは米 Verity 社 を使用している。 ・Netscape Enterprise Server : Version 2.0 には英語版の米 Verity 社の検索エンジンが入っていた。日 本語対応にするためには、 上記 Topic を別途購入することとなっていた。 確か 2.1 で日本語対応の検索エンジンが備わった記事を見たような気が する。ただし Word や Excel は対象外で制限が結構ある。 97年9月に 3.0 が出て、これで本格的に日本語対応、Word, Excel, PowerPoint など 検索対象になった。Catalog Server は複数の Enterprise Server からの 検索をできるようにするものらしい。 ・Ingrid : NTTの検索システム。http://www.ingrid.org/ ・PanaSearch/TS: 松下電気産業。Solaris, Windows NT など。 ・SAVVY/EFS : Solaris, Windows NT など。 ・MediaFinder : Sony のEWSのみ。HTML のみ対象。50 万円程度。 ・Excite : http://www.excite.com/ ・Interleaf5 : 日本語全文検索ビュ−イングツ−ルあり WorldView。 ・QuickFINDER : パソコン用、12,800 円。ディアイエス。http://www.dis.co.jp/ ・俊司くん : パソコン用、24,800 円。言語工学研究所。 など。 * 全文検索ソフトのフリ−ソフト 先ずは、フリ−の全文検索ソフトを作成している京都大学の馬場氏のURLを紹介したい。 http://www.kusastro.kyoto-u.ac.jp/~baba/wais/ ここでは馬場氏が全文検索ソフトの市販品とフリ−ソフトの状況について、網羅的に記載 している。「Software Design」'97/08 、馬場氏執筆の freeWAIS-sf + KAKASI + SFgate の記事もある。彼の言によれば、この組み合わせの全文検索ソフトは市販品に全くひけを とらないとのことである。難点はコンパイルがかなりめんどうなことである。またソニ− の SSE-1.1 は評価に値するとも述べている。以下主なフリ−ソフトを挙げる ・WAIS wais-japanese とも呼ばれる。(製品版は富士通が販売している) ・freeWAIS WAIS の検索機能強化版。 ・freeWAIS-sf 日本語形態素解析ソフトに KAKASI, ChaSen, JUMAN のどれかを使う。 ・SSE-1.1 ソニ−(株)、http://www.sony.co.jp/search/download-j.html。 古いもの順に並べた。これらはいずれも日本語の検索をするために、日本の大学で作成さ れた日本語形態素解析ソフトを使っている。JUMAN というのが最初に作られている。日本 語形態素解析とは何かについては、ここでは述べないが、ともかくアルファベットだけの 英語文章のマッチングに較べ、日本語ではややこしくなるだろうことは想像できるだろう。 WWWサ−バと検索ソフトのインタ−フェ−スは、SFgate とという CGI パッケ−ジを用 いる。これは Perl で書かれている。雛型が用意されているので、この設定はそう難しく ないだろう。この雛型のスクリプトを見てみると、複数のWAISサ−バを指定すること ができる。この検索結果は、同時に表示されることになる。 どうも SFgate は SSE では 使えないのか、SSE のドキュメントには使えるとは書かれていない。 多分 CGI プログラ ムをちょっと書かないけないみたいである。 それぞれの特徴を少し述べておこう。論理検索について。SSE は and, or, not 演算がで きると明示されているのだが、どうも WAIS 系は表現があやふやである。実際設定してみ ないと分からない。対象にできるファイルは、WAIS 系は GIF などの画像、音声デ−タも ファイル名をインデックスすることにより、扱うことが可能である。SSE の方は HTML と plain-text のみとのことである。 (4) WWWと全文検索について '99/11〜 * Namazu による全文検索 [ 全文検索の現状 ] およそ二年前、全文検索について調べた。その時すでにフリ−ソフトをはじめ多くのソフ トがあった。フリ−ソフトの一つでも、とりあえずインスト−ルして試してみたかったが、 そのインスト−ル自体がめんどくさそうで、結局やらずじまいだった。しばらく前からど うも Namazu というキ−ワ−ドが目につく。 Linux の Plamo Linux と Vine に最初から Namazu が入っていて、ドキュメントの検索に便利といった記事だ。tknamazu という検索 画面のソフトも入っているので、すぐに使えるとのことだ。京大の馬場氏のサイトも久し ぶりに覗いてみた。彼はその後も全文検索ソフトのワッチを続け本も出した。馬場氏いわ く、全文検索ソフトは概ねフリ−ソフトで十分で、 今では Freya, SGSE, Namazu の3っ つがいいのでないか。SSE や freeWAIS はもうすでに古く、お勧めではないようだ。 goo で "全文検索 Namazu" で引いたら、Namazu を使った検索サイトが一杯出てきた。いつの 間にこんな使われるようになったのか。どうやら Namazu はかなり簡単に検索サイトを作 れるようである。 [ Namazu 概観 ] Perl や nkf、gcc が揃っていたらインスト−ルは簡単。 別にウェブに組み込まなくても、 コマンドでちゃちゃっと試せるし。使うのもすごく簡単だった。以前 freeWAIS とか検討 したがその時はインスト−ル自体が難題だった。 Namazu これなら使えるというのが1日、 触ってみた感想である。Namazu の開発履歴を見てみた。 97年の7月から8月にかけて、 一挙にベ−スは作成してしまっている。すごい。以前調べた時には、どこにも Namazu っ て出てなかった。人間やる気になればできるものだ。SI業者はアメリカなんかから一早 くアプリを見つけ出し、ちょっと日本語対応させて売ることばかりに腐心している。自前 で作ろうという気概が全くない。この Namazu の開発姿勢を、多いに見習うべきだと思う。 Namazu は日本語の文字の切り出しにデフォルトで、KAKASI というフリ−ソフトを使うよ うになっている。KAKASI は漢字をかな、ローマ字に変換するプログラムで、 同様なのに ChaSen というのもあり Namazu でも使える。両者の違いだとか辞書の追加などは、 それ ぞれのドキュメントを見られたい。検索用インデックスのサイズのことだが、ドキュメン トには、英文 75MB のインデックスは 29 MB とあった。これは小さいのでないか。 元フ ァイルよりでかくなるのが、全文検索の常だ。要約も出してくれる。ただのテキストなら、 ファイル先頭の 200 文字をそのまま使うとある。v1.3.0.0 まではインデックスは追加の みだった。それが v1.3.0.0 以降では、削除、更新もできるようになっている。 バイナリパッケ−ジもある。OS/2 用、Linux の RPM 用、Windows 95/98/2000/NT 用と揃 っている。それに便利なツ−ルもどんどん開発されている。 Tcl/Tk でコ−ディングされ た tknamazu 検索ソフト、実行には別に lynx がいる。WWWブラウザがなくても、画面 ツ−ルから検索できるのだ。Mule に組込むための namazu.el というのもある。 他 Java 用とか Windows 用の検索ツ−ルもある。 これらは総て GNU General Public License に よるフリ−ソフトである。しかし GNU の条文というのはよく分からないものだ。 ともか くソ−ス込みで公開すること。商用利用はダメなこと。小生はそう思っているのだが。 [ Namazu ドキュメントからの特徴抜粋 ] ・and は省略してもいい。or, not, フレ−ズは "..." または { ... } 指定。 ・( Linux or BsdOS ) and UNIX もといったのも可。(Linux or BsdOS) はだめ。 ・ワイルドカ−ドも使える。例えば net*、*net、*net* といった検索。 ・Subjext:, From:, Message-Id による検索。Mail と News の記事検索。 ・Microsoft Word の文章にも対応できる。HTML に一度変換して使うそうだ。 ・正規表現によるゆらぎのある検索。/インタ−?フェ[イ−]ス/ こんな指定。 ・スラッシュ / を含んだ検索もできる。例えば 'TCP/IP'。 ・アルファベットの大文字、小文字の区別はしない。 ・HTML の は ALT で指定された文字列を検索対象にする。 ・/usr/local/namazu/contrib/bnamazu は Perl による便利な検索プログラム。 ・mknmz はディレクトリを再帰的にインデックスする。 ・namazu は複数の検索インデックスを指定できる。 ・他 namazu コマンドのオプション、いろいろあるよん。 % namazu -h : HTML 出力する。 % namazu -s, -S : 短く結果を表示する % namazu -l, -e : 新しい順、古い順に表示する。 % namazu -o file : ファイルに書き出す。 * 参考資料 http://openlab.ring.gr.jp/namazu/manual.html > 全文検索システム Namazu Version 1.3.0.10 説明書。Last Modified: 1999-08-31。 GPL2。Windows パソコンからプリントしたら22ぺ−ジもあった、 http://kakasi.namazu.org/ > KAKASI―漢字→かな(ロ−マ字)変換プログラム。kanji kana simple inverter。 GPL2。1999/10/29 KAKASI バ−ジョン 2.3.1 を公開。 ftp://kakasi.namazu.org/pub/kakasi/。 「日本語全文検索システムの構築と活用」 馬場肇、ソフトバンク > '98/09/24 発刊。2,800 円、税別。よしだともこさんが応援している。 * かかしのインスト−ル、KAKASI KAKASI を先にいれること。Perl や gcc などのバ−ジョンも一応、確認しておくこと。 % gcc -v Reading specs from /usr/local/lib/gcc-lib/mips-sgi-irix5.3/2.7.2.3/specs gcc version 2.7.2.3 % perl -v This is perl, version 5.004_04 built for IP22-irix % ftp kakasi.namazu.org ftp> cd /pub/kakasi drwxr-xr-x 1024 Oct 29 14:33 .obsolete 以前のバ−ジョン。 -rw-r--r-- 196369 Oct 29 12:59 kakasi-2.3.1-nodict.tar.gz 辞書を含まない。 -rw-r--r-- 1069459 Oct 29 13:05 kakasi-2.3.1.tar.gz 辞書を含むパッケ−ジ。 -rw-r--r-- 873656 Jun 26 1994 kakasidict.940620.gz 辞書のみ。 -rw-r--r-- 21906 Oct 29 13:08 patch-2.3.1.gz ftp> get kakasi-2.3.1.tar.gz % zcat kakasi-2.3.1.tar.gz | tar xvf - % cd kakasi-2.3.1; ls AUTHORS NEWS aclocal.m4 install-sh* mkinstalldirs* COPYING ONEWS config.guess* itaijidict src/ ChangeLog README config.h.in kakasidict stamp-h.in INSTALL README-ja config.sub* lib/ INSTALL-ja TODO configure* ltconfig* Makefile.am acconfig.h configure.in ltmain.sh Makefile.in acinclude.m4 doc/ missing* % setenv PATH=.:/usr/local/bin:/bin: ... << /usr/local/bin に GNU の make と cc と ld が入っている。 % sh ./configure << 今 C-Shell の環境。B-Shell でやること。 % make 引き数を指定してください << こんなエラ−でとまる。 ドキュメントを見た make[2]: *** [kanwadict] Error 1 ら、Makefile の test -e を test -f にせよ | とあった。 Makefile ---------------------------------------- |kanwadict: | if test -e kakasidict; then \ << -e を -f に変更すること。 % make install 以下入ったファイル。 /usr/local/bin/kakasi, mkkanwa, atoc_conv, rdic_conv, wx2_conv /usr/local/lib/libkakasi.la, libkakasi.a /usr/local/lib/libkakasi.so.3.0 << リンク libkakasi.so.3 , libkakasi.so /usr/local/share/kakasi/kanwadict, itaijidict, /usr/local/include/libkakasi.h << 小生のミスかな >> make で ld がおかしかった。/usr/local/bin/ld もだめ。/bin/ld もだめ。GNU の make や gcc がいかんのか。gcc は /usr/local/lib/gcc-lib/mips-sgi-irix5.3/2.7.2.3 を見 るようになっている。 そこの ld と /usr/local/bin/ld のファイルサイズが違っていた。 2.7.2.3 の ld を /usr/local/bin にもってきたら、うまく通った。ひょとしてこれまで /usr/local/bin/ld はダメで /bin/ld はいいとか書いてきたが、 このせいだったのかな。 % cd /usr/local/lib/gcc-lib/mips-sgi-irix5.3/2.7.2.3; ls SYSCALLS.c.X cc1obj cpp ld libobjc.a cc1 cc1plus include libgcc.a specs * なまずのインスト−ル、Namazu http://openlab.ring.gr.jp/namazu/ より namazu-1.3.0.10.tar.gz をダウンロ−ドして くる。ファイルサイズは約 337 Kbytes。 % zcat namazu-1.3.0.10.tar.gz | tar xvf - % cd namazu-1.3.0.10; ls COPYING INSTALL README.ja VERSION contrib/ lib/ src/ ChangeLog README.en ToDo bin/ doc/ misc/ % ls -F contrib MHonArc-Japanize-patch-1.6.gz namazu.el-1999.05.10.gz NamazuJAVA.030.tar.gz pnamazu-98.12.16.tgz bnamazu* tknamazu-1.11.tar.gz % cd src % ./confgiure << /usr/local/bin にかかしのモジュ−ルが入っているか見る。 % make % make install << インスト−ルすると下記のように展開される。 [/usr/local/namazu] |-[index]- 空なにもなし。 これら7個のコマンドはあまり使わない。 |-[bin]--- mknmz, namazu, ↓ | wdnmz, rvnmz, clnmz, vfnmz, mailutime, gcnmz, gtnmz | |-[doc]--- COPYING, ChangeLog, ToDo | |-[en]-- README.en, intro.html, manual.html | |-[lib]--- NMZ.body.en, NMZ.foot.en, NMZ.head.en, | NMZ.body.ja, NMZ.foot.ja, NMZ.head.ja, | namazu.conf-dist | |-[contrib]-- MHonArc-Japanize-patch-1.6.gz, namazu.el-1999.05.10.gz NamazuJAVA.030.tar.gz, pnamazu-98.12.16.tgz bnamazu, tknamazu-1.11.tar.gz [ namazu.cgi のインスト−ル ] WWWサ−バとやりとりする namazu.cgi は、 Makefile を見ると namazu をコピ−した だけである。 % make install_cgi とやるとデフォルトではル−トに /cgi-bin ディレク トリを作って、そこに入ることになる。 Makefile の CGIDIR を適当な場所に変えること。 /usr/local/source/namazu-1.3.0.10/src/Makefile ---------------------------------------------- |CGIDIR = /cgi-bin |namazu.cgi: namazu | cp namazu namazu.cgi |install_cgi: all | if [ ! -d $(CGIDIR) ]; then \ | mkdir -p $(CGIDIR); \ | fi | cp namazu.cgi $(CGIDIR) [ 検索対象拡張子 ] どうやって解釈するのかな。.*_default ってどういみ意味?。 自分としては拡張子のな いただのテキストファイルも対象に入れたいわけだ。関係ありそうなところ出してみた。 /usr/local/source/namazu-1.3.0.10/src/Makefile ---------------------------------------------- |OPT_TARGET_FILE = .*\\.html?|.*\\.txt|.*_default |OPT_DENY_FILE = .*\\.gif|.*\\.(jpg|jpeg)|.*\\.tar\\.gz|core|.*\\.bak|.*~|\\. |OPT_DEFAULT_FILE = _default .*|\\x23.*|NMZ\\..* |mknmz: mknmz.pl | rm -f $@ | sed -e 's!%OPT_TARGET_FILE%!$(OPT_TARGET_FILE)!g' \ | -e 's!%OPT_DENY_FILE%!$(OPT_DENY_FILE)!g' \ | -e 's!%OPT_DEFAULT_FILE%!$(OPT_DEFAULT_FILE)!g' \ (5) Namazu のWWWサ−バへの実装 '99/11〜 * CGI による結合 スクリプト
これが Namazu へのア クセスである。特に難しいことをしている訳でもないので、 CERN でも NCSA でも httpd デ−モンなら何でも構わない。namazu.cgi は自分で記述するのかなと思ったが Makefile を見たら、ただ namazu オブジェクトをコピ−しているだけだった。WWW用の検索画面 の HTML ファイルはどうするのか。とりあえず goo で "全文検索 Namazu" で出て来るの を、雛型に用いていいと思う。いろいろな所に Namazu を使った検索サイトがある。どれ も同じような画面である。タイトルは"Namazu the full text retrieval search system" 皆これになっている。e-mail まで Namazu の webmaster@foobar.jp のままだったりして。 同じ画面には理由があった。 下記の例でいえば /nix/ikken/NMZ/ に検索のインデックス と共に、返す HTML 画面の雛型ができているのだ。 NMZ.head.ja と NMZ.foot.ja ファイ ルで namazu.html 相当分の HTML になる。 ともかく最初は何か画面がないといけないの で、namazu.html を用意したのだが、アクセスして返ってくるのは NMZ.head.ja と foot なのである。つまりこのファイルの内容をいじれば、好みの画面にできる。作者も少なく とも は変えてくれとドキュメントに書いている。メ−ルアドレスは Makefileで 指定したのが入る。 <A HREF="mailto:webmaster@foobar.jp">webmaster@foobar.jp</A> 放かっておくとこうなってしまうわけだ。これも直すか、必要なければ消してもよい。キ −ワ−ドを何も入れずに検索した時に出るのは、NMZ.body.ja である。 * WWWヘの組込みのガイドライン Namazu の対象とするドキュメントとその検索インデックスは、 httpd デ−モンが稼働し ているマシンにおくこと。一応マシンのアドレスは 192.9.200.1 とする。 社内ではIP アドレスでいいよな。ん?、ひょっとして外部用だったりする場合は、ドメイン名の方が いいのかな。必要な人は自分で確認のこと。ここでは /usr/www/ が httpd のサ−バル− トで /usr/www/docs/ がドキュメントル−トである場合を例にとる。 Namazu はデ−モン でも何でもない。ただの CGI プログラムとして動くだけである。 検索インデックスは最 初マニュアルで作るが、その後は cron で夜中に自動作成してもいい。検索インデックス の作成時間だが、いろいろごちゃごちゃ入っている社内ウェブ約 5 MB で、たった数分だ ったぞ。% du -k で出たのが 5602 だから 5.6 MB ということだよな−。 /usr/local/source/namazu-1.3.0.10/src/Makefile ---------------------------------------------- |#OPT_ADMIN_EMAIL = webmaster@foobar.jp メ−ルアドレスは自社用のに変えること。 |OPT_ADMIN_EMAIL = katou@nix.co.jj そして make する。 % nmknmz /usr/www/docs docs 以下全てのドキュメントを対象にする。 [/usr/www]---[docs]---namazu.html Namazu 検索用 HTML ファイル。 | | | |-index.html サイト index.html ファイル。 | |-[cgi-bin]-namazu.cgi /usr/local/bin/namazu をコピ−すること。 | |-[NMZ]----NMZ.head.ja この二つのファイルはお好きなように。とも NMZ.foot.ja かく一度ファイルの中身は見てみること。 /usr/local/namazu/lib/namazu.conf 区切りはタブのこと。vi で TAB キ−押せば --------------------------------- タブコ−ドが入る。やはり vi はいります。 |INDEX /usr/www/NMZ |REPLACE /usr/www/docs http://192.9.200.1 * 設定 CERN httpd が 8080 ポ−トで稼働しているとする。これに Namazu を加えてみる。 ブラ ウザからは http://192.9.200.1:8080/namazu.html とアクセスする。 検索インデックス は httpd のディレクトリとは関係ない /nix/ikken/NMZ/ に置いてみた。CGI で検索イン デックスさえ見れるようにしておけば、ちゃんとWWWブラウザに検索結果を返すことは できる。ただし、その結果のファイルまでは返すことはできない。検索対象のファイルは httpd のドキュメントル−ト内に置き namazu.conf で REPLACE 指定もすると、初めて検 索してファイルも返すことができるようになる。REPLACE 指定しないとどうなるかは各自 確かめられたい。ファイルのパスがおかしくてアクセスできないはずである。 % /usr/local/bin/httpd -r /etc/httpd.conf & INDY IRIX 5.3 でやってみた。 /etc/httpd.conf ------------------------------------------ |ServerRoot /usr/www |Port 8080 |UserId nobody |GroupId user |Exec /cgi-bin/* /usr/www/cgi-bin/* |Pass /* /usr/www/docs/* |Pass http:* /usr/www/cgi-bin/namazu.cgi << /usr/local/bin/namazu をコピ−。 /usr/www/docs/namazu.html << 下記のようにしてみた。 /usr/www/docs/letter/ << この中に検索対象のファイルがある。 /nix/ikken/NMZ/ << この中で検索インデックスを作成する。 % cd /nix/ikken % mkdir NMZ; cd NMZ << httpd の docs の中には、 検索インデックスは置 % mknmz /usr/www/docs/letter かない方がいいらしい。そりゃそうだ。 /usr/local/namazu/lib/namazu.conf ------------------------------------------------ |INDEX /nix/ikken/NMZ |REPLACE /usr/www/docs http://192.9.200.1:8080 ↑ ↑ 区切りはタブでないとダメ。 * namazu.html ファイルの例 % cat /usr/www/docs/namazu.html 漢字コ−ドはEUCにしてみた。問題はなし。 <HTML> <BODY> <H1>よい子のイントラネット全文検索</H1> </P> <HR> <FORM METHOD="GET" ACTION="/cgi-bin/namazu.cgi"> <P> <STRONG>検索式:</STRONG> <INPUT TYPE="TEXT" NAME="key" SIZE="40" VALUE=""> <INPUT TYPE="SUBMIT" NAME="submit" VALUE="Search!"> <INPUT TYPE="HIDDEN" NAME="whence" VALUE="0"> </P> <P> <STRONG>表示件数:</STRONG> <SELECT NAME="max"> <OPTION VALUE="10">10 <OPTION VALUE="20" SELECTED>20 <OPTION VALUE="30">30 </SELECT> <STRONG>要約表示:</STRONG> <SELECT NAME="format"> 表示は ON または OFF である。 デフォルト <OPTION VALUE="long" SELECTED>ON で ON が表示されている。CGI へは long か <OPTION VALUE="short">OFF short の文字列が渡る。 </SELECT> <STRONG>ソート:</STRONG> <SELECT NAME="sort"> <OPTION VALUE="score" SELECTED>score <OPTION VALUE="later">in late order <OPTION VALUE="earlier">in early order </SELECT> </P> </FORM> </BODY> </HTML> * Namazu とりあえず試してみる '99/11〜 [ 試した結果 ] ・拡張子は txt と html、htm だけが有効である。 ・xxx.doc, xxx.euc, xxx.c, xxx.gif それにただの xxx はだめ。 ・HTML ファイルは <TITLE>Network のタイトルも検索した。 ・インデックス専用のディレクトリが必要である。 ・EUCファイル、シフトJISファイルはいい。 [ コマンドラインによる ] % cd /nix/ikken 検索インデックス用のディレクトリを NMZとした。 % mkdir NMZ % cd NMZ NMZ ディレクトリの中で作業する。 % mknmz /nix/ikken/letter letter ディレクトリ内のファイルを検索対象に 0 /nix/ikken/letter/aone.txt する。mknmz コマンドでインデックスを作成する。 1 /nix/ikken/letter/calsmall.txt 2 /nix/ikken/letter/pdm.txt 拡張子が txt, htm, html 以外のファイルは無視 3 /nix/ikken/letter/toshiba.txt される。 [Base] インデックスファイルを作っている際のログ。 Date: Mon Nov 8 10:59:32 1999 Added Files: 4 files Deleted Files: 0 files Updated Files: 0 files Total Files: 4 files Size: 11,000 bytes Keywords: 950 words Wakati: /usr/local/bin/kakasi -ieuc -oeuc -w Perl Version: 5.00404 Namazu Version: 1.3.0.10 System: irix Time: 16 sec. % namazu '質問' /nix/ikken/NMZ インデックスのディレクトリを指示して、実際に 検索結果 検索してみる。 参考ヒット数: [ 質問: 2 ] 検索式にマッチする 2 個の文書が見つかりました。 1. toshiba.txt (Text File) (score: 2) Date: Thu, 11 Mar 1999 14:13:09 Delivered-To: ikken@tcp-ip.or.jj FromDomain: かとう殿、突然のメールお詫 .. /nix/ikken/letter/toshiba.txt size (3,757 bytes) 2. pdm.txt (Text File) (score: 2) Date: Fri, 05 Feb 1999 16:39:58 弊社 PDM システムについて。ご質問の件、以下に回答させていただきます。.. /nix/ikken/letter/pdm.txt size (2,808 bytes) % namazu "質問 and 解答" /nix/ikken/NMZ '質問 and 解答' はダメ。 検索結果 参考ヒット数: [ 質問: 2 ] [ 回答: 1 ] 検索式にマッチする 1 個の文書が見つかりました。 1. pdm.txt (Text File) (score: 6) Date: Fri, 05 Feb 1999 16:39:58 ... [ 対象ファイルを追加、修正、削除してみる ] % mknmz /nix/ikken/letter ktrim2.txt というファイルを追加した。 4 /nix/ikken/letter/ktrim2.txt Shift-JIS ファイルだったけど、検索し [Append] たらちゃんと日本語の表示もした。 Date: Mon Nov 8 11:29:42 1999 Added Files: 1 files Deleted Files: 0 files Updated Files: 0 files Total Files: 5 files % mknmz /nix/ikken/letter ktrim2.txt というファイルを修正した。 /nix/ikken/letter/ktrim2.html was updated! 6 /nix/ikken/letter/ktrim2.html [Append] Added Files: 1 files % mknmz /nix/ikken/letter /nix/ikken/letter の aone.txt をただ /nix/ikken/letter/aone.txt was deleted! の aone にして検索対象から外してみた。 [Append] Deleted Files: 1 files [ 検索インデックス ] % cd /nix/ikken; ls NMZ NMZ.be NMZ.field.subject NMZ.log ... だ−とファイルができている。検索対象 のファイルは 12 KBしかないが、インデ % du -k NMZ ックスは 583 KB もあった。とりあえず、 583 NMZ ある程度のサイズはいるのだろう。