Last Modified: 11/13/97
サーヴァ単位、イントラネット単位、特定分野専門、といった小中規模での WWW 全文検索システムを *手軽に* 構築することを目的としたソフトウェアです。 決して高度なシステムではありませんが、比較的オーソドックスにまとまっていると思います。単純な CGI の手法を取っているため、 CGI を使用する権限さえあれば一般ユーザでも検索エンジンを運営することができます。
といった変更があります。その他、細かい改良とバグ修正を行っています。詳しくは ChangeLog を参照してください。
Namazu を実際に試して頂くために、 Linux 関連のドキュメントと RFC の全文検索システムを作ってみました。 Linux のドキュメントは開発用 Linux マシンの /usr/doc 以下の約 25 MB のファイルをインデックス化したもので、英文が多いですが、 JF による文書もあるので、日本語で検索することもできます。 RFC は 97 年 9 月頃までの 1719 のファイルをインデックス化しています。
sendmail
IP Masquerade
( emacs | vi ) & replace & string
ftp
MIME BASE64
HTML 2.x I18N
おかしな動作を見つけましたら私の方まで連絡をくださるようお願いします。
大文字、小文字の区別はありません。foo* のように末尾にアスタリスクを指定することで前方一致検索が可能です。また、単語をスペース区切りで並べて書くとアンド検索になります。日本語は KAKASI/ChaSen によって分解され、「日本語情報処理」なら 「日本語」 「情報処理」 というように 2 つの単語に分かれてアンド検索されます。日本語の単語の分解は完全ではありません。品質は辞書によって決定されます。
全角 (2 bytes) アルファベット・記号はすべて 1 byte として処理されます。記号を含む検索も可能で TCP/IP
というような単語の検索も可能です。ただし、記号の処理は完全ではないので TCP IP
のように分けてアンド検索をかけた方が取りこぼしがありません (その変わり余計なファイルまでヒットしてしまう可能性もありますが)。
括弧を含めたアンド検索とオア検索が可能になっており検索式に & | ( )
を用います。検索式はひとつづつスペース区切りで入力しなければなりません。例えば
( sed | awk ) & regexp
といった検索をすることができます。括弧のネストもできるので、さらに複雑な検索式で検索することも可能です。検索結果はスコアの高い順に表示されます。
この全文検索システムはインデックス作成の部分を Perl で行い、検索部分 (CGI) をC 言語によるプログラムで行う仕組みになっています。検索速度は OS のディスクキャッシュの効果が大きく影響してくるので厳密には測定できませんが、 Pentium 166 MHz, Memory 64 MB の Linux マシンで数十メガバイトのファイルを元に作成されたインデックスを検索した場合、大体 0.1 秒程度で検索が完了します (日本語の分解をしないとき)。アルゴリズムの性質上、検索時間はインデックスのサイズにそれほど影響されません (理論的には log 関数の伸びを示します)。
検索プログラムはメモリをほんのわずかしか要求しませんし、単体で CGI として機能するので (日本語の分解には KAKASI/ChaSen を呼び出しますが) 、それなりに軽いはずです。
検索はアンド検索とオア検索をサポートしています。検索結果の表示はスコアの高い順にソートされ、 AltaVista や ODINのように要約の表示を行います。要約は HTML のヘディング構造を元に作成されます。また、一ページで表示しきれない分についてはページ単位 (デフォルトでは 20 件単位) で表示できるようになっています。
スコアは単語の出現回数だけではなく <TITLE>
<H[1-6]>
<A>
などの HTML タグによる重みを考慮して計算されます。また、<META NAME="keywords" CONTENT="
foo bar">
にも対応しています。
インデックス作成の際に <IMG> タグから ALT 要素を取り出す、実体参照を復号する、検索結果の表示に ISO-2022-JP で HTML 2.x (RFC 2070) に従った HTML を出力するなど、 HTML の扱いにはできるだけ配慮しています。また、出力する HTML については石川雅康@慶應 W3C さんの作成された jweblint で検証済みです。
インデックス作成にかかる時間は Pentium 166 MHz + 64 MB の Linux マシンで約 2000 個の合計 25 MB のファイルを処理した場合で約 50 分 (KAKASI を使用)。インデックスの更新は追加のみをサポートしています。
外部のサーヴァのファイルの取得は他のソフトに任せています。 東北大学のくまがいまさあきさんの作成された httpdown が良いと思います。日本語のわかち書きには京都大学の馬場 肇さんがパッチをあてた kakasi-2.2.5, または奈良先端科学技術大学院大学の ChaSen を利用させていただいております。
さらに詳しい情報を知りたい方はマニュアルを参照してください。
GPL2 (日本語訳)に従ったフリーソフトウェアとして公開します。このささやかな全文検索システムが WWW による情報の提供・収集に貢献できれば幸いです。
プログラムの履歴に関しては ChangeLog を参照してください。