全文検索システムRastをApache 2.0.xに組み込み、Webベースのサーチエンジンサービスを実行するモジュール mod_search_rast v0.0.1 をリリース。って殆どテストしてないけど(汗)
Rastって?
Rastは株式会社ネットワーク応用通信研究所が提供するGPLな全文検索システムです。日本語のドキュメントをN-gramまたは分かち書きによってデータベース化し、全文検索が行えます。Rastは全文検索のためのインデックス作成・保守や検索のための C, Ruby, PHP, Perlのライブラリが提供されており、任意のアプリケーションに全文検索機能を追加することができます。
mod_search_rastって?
mod_search_rastは上記のRastをApache 2.0.xに組み込み、Webベースの検索サービスを実施するためのApacheモジュールです。任意のRastのデータベースをWebから高速に検索することができます。データベースの作成やドキュメントの追加、Webサイトのクロール機能などは持ち合わせていないため、利用に際しては別途データベースのメンテナンスツールや、ドキュメント追加ツールなどを用意する必要があります。
特徴としては
- 任意のRastデータベースをWebから高速に検索可能
- 検索結果ページ等をテンプレートでカスタマイズ可能
- 任意のプロパティを元に検索結果のソートが可能
インストール方法
Rastをインストールした上で、下記の配布パッケージをダウンロードします。mod_search_rast-0.0.1.tar.gz(ちなみに2005年5月6日13時以前に上記ファイルをダウンロードされた方は、中身がちゃんとしてないtar-ballをgetされてますので注意。ってかスマンです) パッケージを展開し、添付されているconfigureスクリプトを実行し make; make installします。
$ tar zxvf mod_search_rast-0.0.1.tar.gz $ cd mod_search_rast-0.0.1/ $ ./configure $ make # make installconfigureスクリプトはRastのライブラリがインストールされているか、Apache 2.0.xがインストールされているかなどを調べ、ビルドに必要なパラメータを調整します。Apacheが一般的な場所にインストールされている場合は configure スクリプトは自動的に検索できますが、ホームディレクトリ等にApacheをインストールしている場合は apxsコマンドのパスを引数--with-apxsで指定してください。
$ ./configure --with-apxs=$HOME/apache2/bin/apxsビルドとインストールが完了したら、httpd.confを下記のように編集します。
<Location /search> SetHandler search-rast RastDatabase /path/to/rast-db RastProperties url title last_modified RastSortProperty last_modified RastResultTemplate /path/to/search-result-template.html </Location>RastDatabaseディレクティブはRastのデータベース(インデックス)ディレクトリのパスを指定します。Rast v0.1.0より古い形式のデータベースは使用できません。また、現在の(手抜きの)実装ではデータベースのエンコーディングはEUC-JPのみをサポートしています。
RastPropertiesディレクティブは検索結果として使用したいRastデータベースのプロパティ名を列挙します。
RastSortPropertyディレクティブは検索結果をプロパティの値でソートする場合に、ソートに使用するプロパティ名を指定します。デフォルトでは昇順でソートします。降順でソートさせる場合は
RastSortProperty page_rank DESCと、DESCオプションを付与して指定します。
RastResultTemplateディレクティブは検索結果画面を構成するHTMLのテンプレートを指定します。同様に検索画面をカスタマイズするための RastDefaultTemplateディレクティブも用意してあります。
テンプレートのカスタマイズ
mod_search_rastは検索画面および検索結果画面をテンプレートファイルによってカスタマイズできます。使用できる構文は次のとおりです- for/end
- if/else/end
<html> <head> <title><$print name=keyword encode=html$> の検索結果</title> </head> <body> <h1><$print name=keyword encode=html$> の検索結果</h1> <p><$print name=num_item encode=html$> 件みつかりました</p> <$for name=result$> <div class="resultitem"> <a href="<$print name=url encode=none$>"><$print name=title encode=html$></a> <p><$print name=summary encode=html$></p> </div> <$end$> <$for name=pages$> <$if name=current_page$> <$print name=page_num encode=html$> <$else$> <a href="?num=<$print name=num_per_page encode=uri$>&q=<$print name=keyword encode=uri$>&start=<$print name=offset encode=uri$>"><$print name=page_num encode=html$></a> <$end$> <$end$> </body> </html>printは"name"と"encode"を必ず指定する必要があります。現在サポーしているencodeは'html'と'uri'のみで、それ以外の値は無視されそのまま表示されます。
for/endは繰り返し要素のブロックを指定します。mod_search_rastでは検索にヒットした文書群を表す'result'と、ページング(次のn件)用の'pages'の2つです。
検索に使用したキーワードは 'keyword'、検索にヒットした文書の数は'num_item'でprintできます。for name=resultのブロック内では文書のサマリ'summary'の他に、httpd.confのRastPropertiesディレクティブで指定したプロパティ名をprintできます。
その他、具体的な記述についてはdefault_template.hなどを参考にしてみてください。
テンプレートファイルはApacheの起動時にロードされ、実行中はその解析結果を使い回しています。そのためテンプレートファイルを編集した場合はApacheを再起動する必要があります。また、テンプレートの実装はカナーリ思いつきというか投げやりに書いたものなので、かなり怪しい実装です。改善のためのpatchは大歓迎ッス!