はじめに
ドキュメントは日々増えて続けています。ドキュメントの数が多くなるほど、目的の情報は見つけにくくなるため、それらのドキュメントを効率よく管理する方法が必要です。その解決策の一つとして、複数のドキュメント(ファイル)をまたいで検索することができる「全文検索サーバー」の導入が挙げられます。
Fessは簡単に導入できる、Javaベースのオープンソース全文検索サーバーです。Fessの検索エンジン部分にはApache Solrを利用しています。Solrは、2億ドキュメントもインデックス可能と言われる非常に高機能な検索エンジンです。一方で、Apache Solrで検索システムを構築しようとする場合、クローラ部分などを自分で実装する必要性があります。Fessではクローラ部分にSeasar Projectから提供されるS2Robotを利用して、ウェブやファイルシステム上の様々な種類のドキュメントを収集して検索対象とすることができます。
そこで、本記事ではFessによる検索サーバーの構築方法について紹介します。
対象読者
- 検索システムを構築してみたい方
- 既存のシステムに検索機能を追加してみたい方
- Apache Solr に興味がある方
必要な環境
この記事の内容に関しては次の環境で、動作確認を行っています。
- Windows XP(Service Pack3)
- JDK 1.6.0_16
Fessの特徴
Fessはウェブやファイルシステムを対象とした、オープンソースの全文検索システムです。SourceForge.jpのFessサイトにおいてApacheライセンスで提供されています。
Javaベースの検索システム
Fessは下図の通り、さまざまなオープンソースプロダクトを利用して構築されています。
配布物はTomcatにFessとSolrのwarファイルが配備された形になります。Fessのwarファイルは検索画面や管理画面を提供しています。Fessは開発フレームワークとしてSeasar2を利用し、プレゼンテーション層にはSAStrutsを採用しています。そのため、画面などのカスタマイズが必要な場合はJSPを修正することで簡単に対応できます。
また、設定データやクロールデータを保存するために、組み込みデータベースのH2 Databaseを利用し、O/RマッパーのDBFluteを利用してアクセスしています。S2ChronosはSeasarプロジェクトで提供されるスケジューリングフレームワークで、Fessでは指定された時間にクロールするために利用しています。SolrとS2Robotについては後述します。
FessはJavaベースのシステムとして構築されているので、どのプラットフォームでも実行可能です。各種設定もウェブブラウザから簡単に行えるUIを備えています。
Apache Solrを検索エンジンとして利用
Apache SolrはApache Software Foundationから提供される、Luceneをベースとしたエンタープライズ向け検索サーバーです。特徴として、ファセット検索、検索結果の強調表示、複数の出力形式などをサポートしていることが挙げられます。また、検索対象のドキュメント数は、Solrサーバーの構成次第で数億ドキュメントにもなり、大規模サイトへもスケールアウトできる検索サーバーです。利用実績も日本でも数多くあり、注目されている検索エンジンの一つであると言えます。
Fessでは、検索エンジン部分にApache Solrを採用しています。Fessの配布物にはSolrが同梱されていますが、FessのSolrサーバーを別のサーバーへ切り出して利用することも可能です。また、Fessは複数のSolrサーバーをグループとして管理し、冗長構成を組むことが可能です。このようにFessではSolrのもつ高い拡張性を活かすことができる設計になっています。
S2Robotをクロールエンジンとして利用
S2RobotはSeasarプロジェクトから提供される、クローラフレームワークです。S2Robotはウェブ上やファイルシステム上にあるドキュメントを巡回して収集することができます。ドキュメント収集もマルチスレッドで、同時に複数のドキュメントを効率よく処理することが可能です。また、扱えるドキュメントはHTMLはもちろんのこと、WordやExcelなどのMS Office系ファイル、zipなどのアーカイブファイル、画像や音声ファイルなど、数多くのフォーマットに対応しています(画像や音声ファイルの場合はメタ情報を取得します)。
FessではS2Robotを利用して、ウェブ上およびファイルシステム上のドキュメントを巡回し、テキスト情報を収集します。対応するファイルフォーマットもS2Robotが扱えるものを検索対象とすることができます。S2Robotでクロール実行するためのパラメータなどはFessの管理UIから設定することが可能です。
モバイル対応
Fessはdocomo、au、ソフトバンクの携帯電話端末での閲覧にも対応しています。ドキュメントをインデックスする際にどの端末で検索結果を閲覧可能にするかを指定できます。本稿ではモバイル端末での閲覧については省略し、次回説明する予定です。