Follow Us.RSS

2013年6月20日(木)全文検索サーバー Fess を試す

  • Fess は Apache ライセンスで配布されている全文検索サーバーです。CMONOS.JP で構築したサイトを検索できるかどうか試してみました。

  • (2013年6月20日(木) 午前11時37分36秒 更新)
  • このエントリーをはてなブックマークに追加
    BuzzurlにブックマークBuzzurlにブックマーク

インストールは拍子抜けするほど簡単!

「5 分で簡単に構築可能な全文検索サーバー」のうたい文句通り、Fess のインストールはおそろしく簡単でした。それだけでなく Fess には日本語のわかりやすい管理画面までついてきます。ブラウザから簡単に設定を変更できるのはすばらしいですね!

ヘルプも充実。公式サイトのインストール解説を見れば、たとえコマンドが苦手でも、あっという間にインストールできるのではないかと思います。ざっくり説明すると、だいたいこんなかんじです。

  1. Fess 最新版をダウンロードします。
  2. zipファイルを解凍してできたフォルダを適当なフォルダに置きます。
  3. Unix環境では fess-server/bin の中にあるすべてのシェルスクリプトファイルに実行権を付加します。
    $ chmod +x bin/*.sh
  4. Unix環境の場合はstartup.shを実行します。
    $ ./bin/startup.sh

あとはスクリプトが全部やってくれるという超親切設計! インストール自体は一瞬で完了しました。

(テストではなくインターネットに公開する場合は、公式サイトのインストール解説にしたがって管理者パスワードの変更をお忘れなく。)

わかりやすい管理画面

わかりやすい管理画面。HTTP経由でウェブページを巡回するウェブクロールのほか、namazu 同様、指定されたフォルダ配下のファイルをインデックスに追加するファイルシステムクロールなどが行えます。BASIC 認証でアクセス制限されたページも、ウェブ認証にユーザー名とパスワードを登録しておけば検索対象に含めることができます。

統計

検索に関連した統計情報を表示することも可能です。

カスタイマイズ例

今回 Fess を試すにあたって設定したことをメモがわりにご紹介します。もしおかしなことを書いていたり、こうした方がいいよということがありましたら、ぜひコメント欄でご指摘くださいm(_ _)m。

※注意:カスタマイズ作業を行う場合は、作業の前に必ず Fess を終了させてください。

<script> タグの中身を検索対象としない

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/」にしたい場合は次を変更します。

「fess-server/webapps/fess」フォルダ名を変更します。
「search」に変更します(fess-server/webapps/search)。
web.xml の管理画面関連パスを変更します。
「fess-server/webapps/search/WEB-INF/web.xml」60-67行めあたり。「/fess/」となっているところを「/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>
「setenv.sh (Windows の場合は setenv.bat)」を書き換えます。
「fess-server/bin」にある起動用シェルスクリプトのうち「setenv.sh (setenv.bat)」を開き、「/fess/」となっているところを「/search/」に書き換えます。
$CATALINA_HOME/webapps/search/WEB-INF/logs/fess.out

以上でフォルダ名の変更は完了です。

参考)フォーラム: サポート - FESSのURLについて - Fess: 全文検索システム (フェス) - SourceForge.JP

Apache 経由で Fess にアクセスする

ここまでの作業によって「http://localhost:8080/search/」で Fess にアクセスできるようになりました。ただこのままでは、ポート番号を入力するのが手間ですし、たとえば「http://localhost:8080/」にアクセスすると真っ白な画面が表示され、ちょっと美しくないです。そこで Apache 経由で Fess にアクセスできるようにしましょう。

httpd.conf を書き換えます。
httpd.conf は「/etc/httpd/conf/httpd.conf」などにあります。MacOS X では「/private/etc/Apache2/httpd.conf」です。 httpd.conf に次の記述があるか確認します。記述がない場合は追記します。(モジュールがインストールされていない場合は、これらモジュールを含むよう指定した上で Apache を再インストールする必要があります。)
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
Apache 経由で Fess にアクセスする設定を作成します。
先ほど httpd.conf に書き込んだパス(/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 とディレクトリ名をあわせないと表示が崩れますので注意してください。
Apache を再起動します。
$ sudo apachectl restart

これで「http://localhost/search/」にアクセスすると Fess が表示されるようになりました。

CMONOS.JP で構築したサイトを Fess で検索する

Fess にはウェブクロール機能がついているので、CGI や PHP で動的に生成されるページもインデックスしてくれるのが便利です。ただ、ウェブクロールを効率よく実行するには、使用しているツールにあわせてクロール対象を絞り込む必要があります。

たとえば CMONOS.JP の場合、「カレンダー」のリンクをたどり出すと、過去そして未来へ、際限なくページが生成されます。また「テーブルメーカー」には、表示オプションのバリエーションがたくさんある上に、項目ごとにソートするリンクもあります。何も設定していないと、Fess のウェブクローラーは、それらバリエーションのひとつひとつを、ソートできる項目の数だけ、何度も何度もぐるぐる巡回します。その組み合わせは膨大で、レコード数が少なくても、生成されるページはすぐに万単位になってしまいます。

動的に生成されるページをクロールするには、ツールにあわせた設定が必要不可欠と言えるでしょう。

CMONOS.JP にあわせたウェブクロール設定

CMONOS.JP の場合、だいたいこんなかんじにすると効率よくクロールしてくれるようでした。

設定名localhost
URLhttp://localhost/
クロール対象とするURLhttp://localhost(?=/).*(/|\.(s?html?|cgi|cgi\?.+|cgi/.*|pdf|txt|docx?|xlsx?|pptx?|csv))$
クロール対象から除外するURLhttp://localhost/error/.*
http://localhost/search/.*
http://localhost/robots.txt
.*/(lib|image|imageLib|history)/.*
.*\.pending/.*
.*m=(Editor|Input|Tools|TreeView|UserGeneratedFieldEditor|Ics).*
.*&c=[^&]+&c=[^&]+.*
.*&c=\d+(,|%2C).*
.*listtree.*
.*event_category=.*
.*&(date|ct|f|s)=.*
.*/start\.cgi\?(c=\w+&|)n=\d+&v=(?!listarticle)\w+$
.*/start\.cgi\?.*m=(TableViewer|TileViewer|Gate|DetailGate).*&n=.*
.*/m\.cgi.*
.*/counter\.cgi.*
.*/stat\.cgi.*
.*/taketori\.cgi.*
検索対象とするURL
検索対象から除外するURL.*\?date=.*
設定パラメータ
深さ
最大アクセス数
ユーザーエージェントMozilla/5.0 (compatible; Fess/8.1; +http://fess.codelibs.org/bot.html)
スレッド数5
間隔1000ミリ秒
ブースト値1
ブラウザPC
DoCoMo
au
Softbank
ロール
ラベル
状態有効

「クロール対象とする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」と設定してあっても、そのサーバに割り当てられたホスト名でアクセス可能です。ホスト名で設定する必要はありません。

正規表現置換文字処理方法
http://localhost//表示時
^(.*)&mod=[^&]+(.*)$$1$2クロール時/表示時

パスマッピング設定では正規表現と後方参照が使えるので、URL から必要のない文字列を削除することが可能です。上記二つめの設定のように、同じ内容を表示する URL が複数あって、それらをひとつの URL に統一したいときなどにも使えますね。

パスマッピング設定

ブラウザから設定を確認・変更できるのは本当に便利です!

デフォルトのままで十分に美しく機能的な検索画面

Fess の検索画面は Bootstrap を使って今風にデザインされています。ロゴを変える程度で、ほとんど何もいじらずにそのまま使えそうです。

メインページ

シンプルなメインページ。過去に検索されたキーワードに基づくオートコンプリート・サジェスト機能が用意されています。

検索結果

機能的な検索結果画面。更新時期からさらに絞り込むことができます。

検索オプション

検索オプションを表示したところ。ソートと表示件数を変えられます。

いかがでしたか? 全文検索サーバー Fess、なかなかよくできていますよね。検索エンジンのベースとなっている Solr は海外では Digg など大規模なサイトでも使われているそうです。

実は今回、CMONOS.JP で構築したサイトを Fess で全文検索できるようにしたくて、先日公開した最新版では、動的にページを生成するツールのクエリをできるかぎりシンプルにしました。デフォルトの設定と同じ場合は表示オプションをクエリに含まないようにするなどしています。Fess で CMONOS.JP で構築したサイトのサイト検索を実現する際には、CMONOS.JP のアップデートもぜひご検討ください!

更新情報

最近の記事

RSS

カレンダー

2013年6月
1
2345678
9101112131415
16171819202122
23242526272829
30
このページのトップへ