Blog

Apache用全文検索モジュールmod_search_rast 0.0.1

By Hiroyuki OYAMA Fri May 6 15:18:57 2005

全文検索システム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 v0.1.0とApache 2.0.54 workerの組み合わせで、Mac OS X 10.3.9上で稼働実績があります。私個人がRastの評価のために記述したソフトウェアですので、その品質に関しては多くを期待しないでください。

インストール方法

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 install
configureスクリプトは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は検索画面および検索結果画面をテンプレートファイルによってカスタマイズできます。使用できる構文は次のとおりです
  • print
  • for/end
  • if/else/end
例としてプロパティ 'url', 'title' をもったデータベースの検索結果を表示するテンプレートは次のような記述になります。
<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は大歓迎ッス!

ライセンス

ライセンスはGPL v2またはそれ以降です。

Comments

Post a comment

Name:


URL:


Comments:


WebエンジニアのためのApacheモジュールプログラミングガイド

ApacheをHackする!
モジュールプログラミング強烈初体験!!
定価: 2,919円(税込)
ISBN: 4-7741-1799-4

hiroyuki_oyama IM status

Apache Users

Apache Modules

CPAN


Home > Blog > Apache用全文検索モジュールmod_search_rast 0.0.1