Fess は Apache ライセンスで配布されている全文検索サーバーです。CMONOS.JP で構築したサイトを検索できるかどうか試してみました。
「5 分で簡単に構築可能な全文検索サーバー」のうたい文句通り、Fess のインストールはおそろしく簡単でした。それだけでなく Fess には日本語のわかりやすい管理画面までついてきます。ブラウザから簡単に設定を変更できるのはすばらしいですね!
ヘルプも充実。公式サイトのインストール解説を見れば、たとえコマンドが苦手でも、あっという間にインストールできるのではないかと思います。ざっくり説明すると、だいたいこんなかんじです。
$ chmod +x bin/*.sh
$ ./bin/startup.sh
あとはスクリプトが全部やってくれるという超親切設計! インストール自体は一瞬で完了しました。
(テストではなくインターネットに公開する場合は、公式サイトのインストール解説にしたがって管理者パスワードの変更をお忘れなく。)
わかりやすい管理画面。HTTP経由でウェブページを巡回するウェブクロールのほか、namazu 同様、指定されたフォルダ配下のファイルをインデックスに追加するファイルシステムクロールなどが行えます。BASIC 認証でアクセス制限されたページも、ウェブ認証にユーザー名とパスワードを登録しておけば検索対象に含めることができます。
検索に関連した統計情報を表示することも可能です。
今回 Fess を試すにあたって設定したことをメモがわりにご紹介します。もしおかしなことを書いていたり、こうした方がいいよということがありましたら、ぜひコメント欄でご指摘くださいm(_ _)m。
※注意:カスタマイズ作業を行う場合は、作業の前に必ず Fess を終了させてください。
Fess のデフォルトの状態では <script> タグの中身が検索対象となっており、検索結果に JavaScript がそのまま表示されることがあります。サイトによってはその方が都合がいいこともあるとは思いますが、多くの場合 JavaScript をあまり見せたくないと思いますので、<script> タグの中身を無視するよう設定しました。
設定箇所は「fess-server/webapps/fess/WEB-INF/classes/s2robot_transformer.dicon」の34行めあたりです。コメントアウトされている部分のコメントタグ(<!-- -->)を外して有効化します。
<initMethod name="addPrunedTag">
<arg>"script"</arg>
</initMethod>
他にも、HTML5 で構築しているサイトなら、<aside> や <footer> を無視させると、よりよい検索結果が得られるかもしれませんね(最新記事一覧のタイトルがすべてのページでヒットしてしまうのを防ぎたい場合など)。
参考)Re: 表示されない文字の検索 (fess-user 57) - Fess: 全文検索システム (フェス) - SourceForge.JP
Fess にアクセスするにはデフォルトの状態では、「http://localhost:8080/fess/」にアクセスします。たとえば、これを「http://localhost:8080/search/」にしたい場合は次を変更します。
<init-param>
<param-name>urlPatterns</param-name>
<param-value>/search/admin.*</param-value>
</init-param>
<init-param>
<param-name>loginPath</param-name>
<param-value>/search/login/</param-value>
</init-param>
$CATALINA_HOME/webapps/search/WEB-INF/logs/fess.out
以上でフォルダ名の変更は完了です。
参考)フォーラム: サポート - FESSのURLについて - Fess: 全文検索システム (フェス) - SourceForge.JP
ここまでの作業によって「http://localhost:8080/search/」で Fess にアクセスできるようになりました。ただこのままでは、ポート番号を入力するのが手間ですし、たとえば「http://localhost:8080/」にアクセスすると真っ白な画面が表示され、ちょっと美しくないです。そこで Apache 経由で Fess にアクセスできるようにしましょう。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
ついでに後で作成する設定ファイル「httpd-proxy.conf」を読み込ませるため、ファイル末尾に次のように追記します。パスはそれぞれの環境にあわせて読み替えてください。Include /etc/httpd/conf/extra/httpd-proxy.conf
$ sudo vi /etc/httpd/conf/extra/httpd-proxy.conf
Password:
作成したファイルに次のように記述します。ディレクトリは Fess のパスにあわせます。<Location /search/>
ProxyPass ajp://localhost:8009/search/
</Location>
もし Fess のフォルダ名を変えていない場合は、「search」ではなく「fess」になります。Fess とディレクトリ名をあわせないと表示が崩れますので注意してください。$ sudo apachectl restart
これで「http://localhost/search/」にアクセスすると Fess が表示されるようになりました。
Fess にはウェブクロール機能がついているので、CGI や PHP で動的に生成されるページもインデックスしてくれるのが便利です。ただ、ウェブクロールを効率よく実行するには、使用しているツールにあわせてクロール対象を絞り込む必要があります。
たとえば CMONOS.JP の場合、「カレンダー」のリンクをたどり出すと、過去そして未来へ、際限なくページが生成されます。また「テーブルメーカー」には、表示オプションのバリエーションがたくさんある上に、項目ごとにソートするリンクもあります。何も設定していないと、Fess のウェブクローラーは、それらバリエーションのひとつひとつを、ソートできる項目の数だけ、何度も何度もぐるぐる巡回します。その組み合わせは膨大で、レコード数が少なくても、生成されるページはすぐに万単位になってしまいます。
動的に生成されるページをクロールするには、ツールにあわせた設定が必要不可欠と言えるでしょう。
CMONOS.JP の場合、だいたいこんなかんじにすると効率よくクロールしてくれるようでした。
「クロール対象とするURL」は最低限「http://localhost/.*」としないと、リンクをたどってインターネット上のウェブページも巡回してしまいます。
上表の「クロール対象とするURL」設定では、クロール対象をディレクトリ、HTML、 CGI、PDF、オフィス書類に限定しています。Fess は画像からもテキストを抽出するようなんですが、実際には画像などから有用なテキストを取り出せることはまれですし、画像ファイルまで巡回させるとその分無駄に時間がかかります。
またデフォルトの設定では 30秒に3ドキュメント巡回する設定となっており、このまま運用するとクロールに長い時間がかかります。インターネット上のサイトをクロール対象とする場合は、アクセス先に迷惑をかけないようクロール間隔を長めに取るべきですが、社内サーバなどアクセスが限られた環境で使用する場合は、間隔を短めに設定して問題ないと思います。
なお「設定ウィザード」もしくは「クロール全般の設定」の「スケジュール」で自動定期クロールのタイミングを設定できるので、深夜などアクセスの少ない時間を設定しておくとよいでしょう。
インデックスされたページはそのままでは URL が「http://localhost/...」となるので、パスマッピングを設定します。下記例では表示時に「http://localhost/」を「/」に変換させています。Apache 経由で Fess にアクセスしていれば、これでだいじょうぶです。途中でサーバのドメイン名が変わっても設定変更の必要がない利点もあります。
【注意】Fess から見た Apache も Apache から見た Fess も「localhost」にあることに注意してください。Apache と Fess で内部的に「localhost」と設定してあっても、そのサーバに割り当てられたホスト名でアクセス可能です。ホスト名で設定する必要はありません。
パスマッピング設定では正規表現と後方参照が使えるので、URL から必要のない文字列を削除することが可能です。上記二つめの設定のように、同じ内容を表示する URL が複数あって、それらをひとつの URL に統一したいときなどにも使えますね。
ブラウザから設定を確認・変更できるのは本当に便利です!
Fess の検索画面は Bootstrap を使って今風にデザインされています。ロゴを変える程度で、ほとんど何もいじらずにそのまま使えそうです。
シンプルなメインページ。過去に検索されたキーワードに基づくオートコンプリート・サジェスト機能が用意されています。
機能的な検索結果画面。更新時期からさらに絞り込むことができます。
検索オプションを表示したところ。ソートと表示件数を変えられます。
いかがでしたか? 全文検索サーバー Fess、なかなかよくできていますよね。検索エンジンのベースとなっている Solr は海外では Digg など大規模なサイトでも使われているそうです。
実は今回、CMONOS.JP で構築したサイトを Fess で全文検索できるようにしたくて、先日公開した最新版では、動的にページを生成するツールのクエリをできるかぎりシンプルにしました。デフォルトの設定と同じ場合は表示オプションをクエリに含まないようにするなどしています。Fess で CMONOS.JP で構築したサイトのサイト検索を実現する際には、CMONOS.JP のアップデートもぜひご検討ください!