Google Site Searchが2018年3月をもってサービス終了するため、自社Webサイトに組み込む検索サービスを探している方も多いのではないでしょうか。また、企業や個人で保有するファイルが年々増えており、効率よく必要なものを見つけられる仕組みを求める声もよく聞きます。

そうした背景から、検索サーバの導入を検討するケースが増えているようです。

一昔前であればnamazuなどの一部プロダクトに選択肢が限られていましたが、現在ではApache Luceneのような低レイヤーのライブラリから、今回紹介するFessのような導入すればすぐ利用できる検索サーバまで、さまざまなものが出てきています。

本連載では、全文検索サーバFessを使って、ウェブ検索や企業内検索の実現方法を紹介していきます。 検索の理論的な話ではなく、実際の検索課題にどのように対応していくかをもとに実践的な説明していきます。

Fessは手軽に導入できるため、検討して損はないでしょう。導入方法を紹介する今回だけでもぜひご覧になってください。

Fessとは

FessはWeb検索から企業内検索まで幅広く対応できるオープンソースの全文検索サーバです。 豊富な機能を備えていますが、最大の特徴は全文検索の専門知識を必要せず簡単に導入することができ、ブラウザ上で設定するだけで検索システムを構築できるという、導入の手軽さです。

Fessを起動すれば、以下の検索画面がすぐに利用可能です。

トップ画面

検索システムは検索結果の応答性能を求められますが、Fessの心臓部分ともいえる検索エンジンにはElasticsearchを採用しています。 Elasticsearchの機能を最大限に活用することで高い応答速度を実現し、企業内の数Tバイトを超えるファイルサーバの検索や特定のファイルだけ優先表示するような複雑な検索要件にも対応することができます。

インストールと起動

では、早速、検索サーバを構築していきます。Fessの実行にはJava実行環境が必要となるので、事前にJava 8をインストールしておいてください。

Fessの配布物は「http://fess.codelibs.org/」からダウンロードできます。 本稿執筆時点(2017年9月)での最新バージョンは11.4なので、今回はそのZIP版を導入します。

ダウンロード後、fess-11.4.0.zipを任意のフォルダに展開して「fess-11.4.0\bin\fess」を実行してください。

以上の手順だけでFessが利用可能になります。

正しく起動しない場合は環境変数JAVA_HOMEが正しく設定されているか、展開したパスにスペースが入っていないかを確認してください。

ログイン

まず、管理画面の「http://localhost:8080/admin/」にアクセスして、検索対象をクロールするための設定を作成します。管理画面にログインするための管理者アカウント/パスワードは「admin/admin」になります。 管理画面にログインするとダッシュボードが表示されます。

ダッシュボード

Webクロールの設定

左側のメニューの「クローラ」>「Web」を選択して、Webクロール設定の一覧画面を表示します。 Webクロール設定とはWeb上のドキュメント(Webページ)をクロールして検索対象にするための設定です。FessはWeb以外にも共有フォルダやデータベースなども検索対象として設定することができます。

右上の「新規作成」ボタンを押下してクロール設定画面を表示します。 主な設定項目の説明は以下のとおりです。

項目名 説明
名前 一覧ページで表示される名前
URL クロール対象の起点となるURL (このURLからクロールを開始する)
対象/除外するURL 正規表現で対象または除外するURLを指定
深さ 起点のURLからクロールしてページ内のリンクをたどる深さ
最大アクセス数 クロールして取得する最大ページ数
スレッド数 クロールするスレッド数 (5の場合、5スレッドで同時にサイトをクロールする)
間隔 ページをクロールする間隔 (5000の場合、1つのスレッドが5秒間隔で取得する)

今回は以下の設定値でクロール設定を作成します。 この設定は「http://fess.codelibs.org/ja/」以下のページ群を1秒間隔の2スレッドでクロールして(1秒に2ページ程度をクロール)、100ページ程度を検索対象にします。

項目名 設定値
名前 Fess
URL  http://fess.codelibs.org/ja/
クロール対象するURL http://fess.codelibs.org/ja/.*
最大アクセス数 100
スレッド数 2
間隔 1000

クロールの実行

クロール設定が作成できたらクロールを開始します。Fessはクローラをジョブとして管理しているので、ジョブを開始することでクロールを開始できます。

左側のメニューの「システム」>「スケジューラ」を選択して、ジョブ一覧を表示します。 「Default Crawler」ジョブを選択するとジョブ詳細が表示され、「今すぐ開始」ボタンを押下することでクロールが開始されます。

実行中のジョブはジョブ一覧で「実行中」の状態として表示されます。 ネットワークの状況にもよりますが、今回の設定は数分程度でクロールが完了します。

「Default Crawler」は初期設定で毎日0時に開始されるように設定されています。

ですので、Fessを起動しておけば指定された時間に自動でクロールが開始されます。今回のように「今すぐ開始」ボタンによりスケジュールされた時間以外にも開始することができます。

検索

クロール完了後、「http://localhost:8080/」にアクセスし、「Fess」を入力して検索してください。 以下のような検索結果一覧が表示されます。

検索結果

Fessの検索結果画面はレスポンシブWebデザインを採用しているので、端末に合わせた最適な検索画面も提供しています。

スマートフォンでの検索結果

*  *  *

今回はFessを利用して、簡単な設定だけで検索サーバを構築できることを紹介しました。このような簡単な手順だけで検索サーバを構築して利用することができます。

次回は検索結果を既存のWebページに埋め込んで利用する方法を説明したいと思います。

著者紹介

菅谷 信介 (Shinsuke Sugaya)

Apache PredictionIOにて、コミッター兼PMCとして活動。また、自身でもCodeLibs Projectを立ち上げ、オープンソースの全文検索サーバFessなどの開発に従事。