概要
Fess のクローラーは、Webサイトやファイルシステムなどから自動的にコンテンツを収集し、検索インデックスに登録する機能です。 本ガイドでは、クローラーの基本的な概念と設定方法について説明します。
クローラーの基本概念
クローラーとは
クローラー(Crawler)は、指定されたURLやファイルパスを起点として、リンクをたどりながら自動的にコンテンツを収集するプログラムです。
Fess のクローラーは以下の特徴があります:
マルチプロトコル対応: HTTP/HTTPS、ファイルシステム、SMB、FTPなど
スケジュール実行: 定期的な自動クロール
増分クロール: 変更されたコンテンツのみを更新
並列処理: 複数URLの同時クロール
ロボット規約対応: robots.txt の遵守
クローラーの種類
Fess では、対象に応じて以下のクローラー種別があります。
| 種別 | 対象 | 用途 |
|---|---|---|
| Webクローラー | Webサイト(HTTP/HTTPS) | 公開Webサイト、イントラネット内のWebサイト |
| ファイルクローラー | ファイルシステム、SMB、FTP | ファイルサーバー、共有フォルダー |
| データストアクローラー | データベース | RDB、CSV、JSONなどのデータソース |
クロール設定の作成
基本的なクロール設定の追加
管理画面にアクセス
ブラウザで
http://localhost:8080/adminにアクセスし、管理者でログインします。クローラー設定画面を開く
左メニューから「クローラー」→「Web」または「ファイルシステム」を選択します。
新しい設定を作成
「新規作成」ボタンをクリックします。
基本情報を入力
名前: クロール設定の識別名(例: 社内Wiki)
URL: クロール開始URL(例:
https://wiki.example.com/)クロール間隔: クロール実行頻度(例: 1時間ごと)
スレッド数: 並列クロール数(例: 5)
深さ: リンクをたどる階層の深さ(例: 3)
保存
「作成」ボタンをクリックして設定を保存します。
Webクローラーの設定例
社内イントラネットサイトのクロール
名前: 社内ポータル
URL: http://intranet.example.com/
クロール間隔: 1日1回
スレッド数: 10
深さ: 無制限(-1)
最大アクセス数: 10000
公開Webサイトのクロール
名前: 製品サイト
URL: https://www.example.com/products/
クロール間隔: 1週間に1回
スレッド数: 5
深さ: 5
最大アクセス数: 1000
ファイルクローラーの設定例
ローカルファイルシステム
名前: ドキュメントフォルダー
URL: file:///home/share/documents/
クロール間隔: 1日1回
スレッド数: 3
深さ: 無制限(-1)
SMB/CIFS(Windowsファイル共有)
名前: ファイルサーバー
URL: smb://fileserver.example.com/share/
クロール間隔: 1日1回
スレッド数: 5
深さ: 無制限(-1)
認証情報の設定
認証が必要なサイトやファイルサーバーにアクセスする場合は、認証情報を設定します。
管理画面で「クローラー」→「認証」を選択
「新規作成」をクリック
認証情報を入力:
ホスト名: wiki.example.com ポート: 443 認証方式: Basic認証 ユーザー名: crawler_user パスワード: ********
「作成」をクリック
クロールの実行
手動実行
設定したクロールをすぐに実行する場合:
クロール設定一覧で対象の設定を選択
「開始」ボタンをクリック
「スケジューラー」メニューでジョブの実行状況を確認
スケジュール実行
定期的にクロールを実行する場合:
「スケジューラー」メニューを開く
「Default Crawler」ジョブを選択
スケジュール式を設定(Cron形式)
# 毎日午前2時に実行 0 0 2 * * ? # 毎時0分に実行 0 0 * * * ? # 月曜から金曜の午後6時に実行 0 0 18 ? * MON-FRI
「更新」をクリック
クロール状況の確認
実行中のクロール状況を確認:
「スケジューラー」メニューを開く
実行中のジョブを確認
ログで詳細を確認:
tail -f /var/log/fess/fess_crawler.log
基本的な設定項目
クロール対象の制限
URLパターンによる制限
特定のURLパターンのみをクロール対象とする、または除外することができます。
含めるURLパターン(正規表現):
# /docs/ 配下のみをクロール
https://example\.com/docs/.*
除外するURLパターン(正規表現):
# 特定のディレクトリを除外
.*/admin/.*
.*/private/.*
# 特定のファイル拡張子を除外
.*\.(jpg|png|gif|css|js)$
深さの制限
リンクをたどる階層の深さを制限:
0: 開始URLのみ
1: 開始URLと、そこからリンクされたページ
-1: 無制限(全てのリンクをたどる)
最大アクセス数
クロールするページ数の上限:
最大アクセス数: 1000
1000ページまでクロールしたら停止します。
並列クロール数(スレッド数)
同時にクロールするURLの数を指定します。
| 環境 | 推奨値 | 説明 |
|---|---|---|
| 小規模サイト(〜1万ページ) | 3〜5 | 対象サーバーへの負荷を抑える |
| 中規模サイト(1万〜10万ページ) | 5〜10 | バランスの良い設定 |
| 大規模サイト(10万ページ以上) | 10〜20 | 高速クロールが必要 |
| ファイルサーバー | 3〜5 | ファイルI/O負荷を考慮 |
警告
スレッド数を増やしすぎると、クロール対象のサーバーに過度な負荷をかけます。 適切な値を設定してください。
クロール間隔
クロールを実行する頻度を指定します。
# 時間指定
クロール間隔: 3600000 # ミリ秒(1時間)
# または、スケジューラーで設定
0 0 2 * * ? # 毎日午前2時
ファイルサイズの設定
クロールするファイルサイズの上限を設定できます。
取得するファイルサイズの上限
クローラー設定の「設定パラメーター」に以下を追加:
client.maxContentLength=10485760
10MBまでのファイルを取得します。デフォルトでは制限なしです。
注釈
大きなファイルをクロールする場合は、メモリ設定も調整してください。 詳細は メモリ設定 を参照してください。
インデックスするファイルサイズの上限
ファイルの種類ごとにインデックスするサイズの上限を設定できます。
デフォルト値:
HTMLファイル: 2.5MB
その他のファイル: 10MB
設定ファイル: app/WEB-INF/classes/crawler/contentlength.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//DBFLUTE//DTD LastaDi 1.0//EN"
"http://dbflute.org/meta/lastadi10.dtd">
<components namespace="fessCrawler">
<include path="crawler/container.xml" />
<component name="contentLengthHelper"
class="org.codelibs.fess.crawler.helper.ContentLengthHelper" instance="singleton">
<property name="defaultMaxLength">10485760</property><!-- 10M -->
<postConstruct name="addMaxLength">
<arg>"text/html"</arg>
<arg>2621440</arg><!-- 2.5M -->
</postConstruct>
<postConstruct name="addMaxLength">
<arg>"application/pdf"</arg>
<arg>5242880</arg><!-- 5M -->
</postConstruct>
</component>
</components>
PDFファイルを5MBまで処理する設定を追加しています。
警告
扱うファイルサイズを増やす場合は、クローラーのメモリ設定も増やしてください。
単語の長さ制限
概要
英数字だけの長い文字列や連続する記号は、インデックスサイズの増加やパフォーマンス劣化を引き起こします。 そのため、Fess ではデフォルトで以下の制限を設けています:
連続する英数字: 20文字まで
連続する記号: 10文字まで
設定方法
fess_config.properties を編集します。
デフォルト設定:
crawler.document.max.alphanum.term.size=20
crawler.document.max.symbol.term.size=10
例: 制限を緩和する場合
crawler.document.max.alphanum.term.size=50
crawler.document.max.symbol.term.size=20
注釈
長い英数字列で検索する必要がある場合(例: シリアル番号、トークンなど)は、 この値を大きくしてください。ただし、インデックスサイズが増加します。
プロキシの設定
概要
イントラネット内から外部サイトをクロールする場合、ファイアウォールにブロックされることがあります。 その場合はプロキシサーバーを経由してクロールします。
設定方法
管理画面のクロール設定で、「設定パラメーター」に以下を追加します。
基本的なプロキシ設定:
client.proxyHost=proxy.example.com
client.proxyPort=8080
認証が必要なプロキシ:
client.proxyHost=proxy.example.com
client.proxyPort=8080
client.proxyUsername=proxyuser
client.proxyPassword=proxypass
特定のホストをプロキシから除外:
client.nonProxyHosts=localhost|127.0.0.1|*.example.com
システム全体のプロキシ設定
全てのクロール設定で同じプロキシを使用する場合は、環境変数で設定できます。
export http_proxy=http://proxy.example.com:8080
export https_proxy=http://proxy.example.com:8080
export no_proxy=localhost,127.0.0.1,.example.com
robots.txt の設定
概要
robots.txt は、クローラーに対してクロール可否を指示するファイルです。 Fess はデフォルトで robots.txt を遵守します。
設定方法
robots.txt を無視する場合は、fess_config.properties を編集します。
crawler.ignore.robots.txt=true
警告
外部サイトをクロールする場合は、robots.txt を遵守してください。 無視すると、サーバーに過度な負荷をかけたり、利用規約に違反する可能性があります。
User-Agent の設定
クローラーのUser-Agentを変更できます。
管理画面での設定
クロール設定の「設定パラメーター」に追加:
client.userAgent=MyCompanyCrawler/1.0
システム全体の設定
fess_config.properties で設定:
crawler.user.agent=MyCompanyCrawler/1.0
エンコーディング設定
クロールデータのエンコーディング
fess_config.properties で設定:
crawler.crawling.data.encoding=UTF-8
ファイル名のエンコーディング
ファイルシステムのファイル名のエンコーディング:
crawler.document.file.name.encoding=UTF-8
クロールのトラブルシューティング
クロールが開始されない
確認事項:
スケジューラーが有効か確認
「スケジューラー」メニューで「Default Crawler」ジョブが有効か確認
クロール設定が有効か確認
クロール設定一覧で対象の設定が有効になっているか確認
ログを確認
tail -f /var/log/fess/fess.log tail -f /var/log/fess/fess_crawler.log
クロールが途中で停止する
考えられる原因:
メモリ不足
fess_crawler.logにOutOfMemoryErrorがないか確認クローラーのメモリを増やす(詳細は メモリ設定)
ネットワークエラー
タイムアウト設定を調整
リトライ設定を確認
クロール対象のエラー
404エラーが多発していないか確認
ログでエラー詳細を確認
特定のページがクロールされない
確認事項:
URLパターンの確認
除外URLパターンに該当していないか確認
robots.txt の確認
対象サイトの
/robots.txtを確認
認証の確認
認証が必要なページの場合、認証設定を確認
深さ制限
リンクの階層が深さ制限を超えていないか確認
最大アクセス数
最大アクセス数に達していないか確認
クロールが遅い
対策:
スレッド数を増やす
並列クロール数を増やす(ただし、対象サーバーの負荷に注意)
不要なURLを除外
画像やCSSファイルなどを除外URLパターンに追加
タイムアウト設定を調整
応答が遅いサイトの場合、タイムアウトを短くする
クローラーのメモリを増やす
詳細は メモリ設定
ベストプラクティス
クロール設定の推奨事項
適切なスレッド数の設定
対象サーバーに過度な負荷をかけないよう、適切なスレッド数を設定します。
URLパターンの最適化
不要なファイル(画像、CSS、JavaScriptなど)を除外することで、 クロール時間を短縮し、インデックスの品質を向上させます。
深さ制限の設定
サイト構造に応じて適切な深さを設定します。 無制限(-1)は、サイト全体をクロールする場合のみ使用します。
最大アクセス数の設定
想定外に大量のページをクロールしないよう、上限を設定します。
クロール間隔の調整
更新頻度に応じて適切な間隔を設定します。 - 頻繁に更新されるサイト: 1時間〜数時間ごと - あまり更新されないサイト: 1日〜1週間ごと
スケジュール設定の推奨事項
夜間実行
サーバー負荷が低い時間帯(例: 深夜2時)に実行します。
重複実行の回避
前回のクロールが完了してから次のクロールを開始するよう設定します。
エラー時の通知
クロール失敗時にメール通知を設定します。
参考情報
クローラー詳細設定 - クローラー詳細設定
サムネイル画像の設定 - サムネイル設定
メモリ設定 - メモリ設定
ログ設定 - ログ設定