クローラー設定:Web、ファイルサーバー、データベースクロール

概要

Fess のクローラーは、Webサイトやファイルシステムなどから自動的にコンテンツを収集し、検索インデックスに登録する機能です。 Web クローラーによる Web サイト検索、ファイルクローラーによるファイルサーバー検索、データストアクローラーによるデータベースなど各種データソースの検索まで、1 つの Fess で横断的な全文検索を構築できます。 本ガイドでは、クローラーの基本的な概念と設定方法について説明します。

データベースなどその他のデータソースのクロールについては、データベースコネクタ(データベース検索) および データストアコネクタの概要 を参照してください。クロールしたコンテンツ全体の関連性をハイブリッド(キーワード+セマンティック)検索で向上させるには、ハイブリッド検索とランクフュージョン(セマンティック+キーワード) を参照してください。

クローラーの基本概念

クローラーとは

クローラー(Crawler)は、指定されたURLやファイルパスを起点として、リンクをたどりながら自動的にコンテンツを収集するプログラムです。

Fess のクローラーは以下の特徴があります:

  • マルチプロトコル対応: HTTP/HTTPS、ファイルシステム、SMB、FTPなど

  • スケジュール実行: 定期的な自動クロール

  • 増分クロール: 変更されたコンテンツのみを更新

  • 並列処理: 複数URLの同時クロール

  • ロボット規約対応: robots.txt の遵守

クローラーの種類

Fess では、対象に応じて以下のクローラー種別があります。

クローラー種別
種別 対象 用途
Webクローラー Webサイト(HTTP/HTTPS) 公開Webサイト、イントラネット内のWebサイト
ファイルクローラー ファイルシステム、SMB、FTP ファイルサーバー、共有フォルダー
データストアクローラー データベース RDB、CSV、JSONなどのデータソース

クロール設定の作成

基本的なクロール設定の追加

  1. 管理画面にアクセス

    ブラウザで http://localhost:8080/admin にアクセスし、管理者でログインします。

  2. クローラー設定画面を開く

    左メニューから「クローラー」→「ウェブ」または「ファイルシステム」を選択します。

  3. 新しい設定を作成

    「新規作成」ボタンをクリックします。

  4. 基本情報を入力

    • 名前: クロール設定の識別名(例: 社内Wiki)

    • URL: クロール開始URL(例: https://wiki.example.com/)

    • 間隔: 各URLへのアクセス間隔(ミリ秒)(例: 10000)

    • スレッド数: 並列クロール数(例: 5)

    • 深さ: リンクをたどる階層の深さ(例: 3)

  5. 保存

    「作成」ボタンをクリックして設定を保存します。

Webクローラーの設定例

社内イントラネットサイトのクロール

名前: 社内ポータル
URL: http://intranet.example.com/
クロール間隔: 1日1回
スレッド数: 10
深さ: 空欄(無制限)
最大アクセス数: 10000

公開Webサイトのクロール

名前: 製品サイト
URL: https://www.example.com/products/
クロール間隔: 1週間に1回
スレッド数: 5
深さ: 5
最大アクセス数: 1000

ファイルクローラーの設定例

ローカルファイルシステム

名前: ドキュメントフォルダー
URL: file:///home/share/documents/
クロール間隔: 1日1回
スレッド数: 3
深さ: 空欄(無制限)

SMB/CIFS(Windowsファイル共有)

名前: ファイルサーバー
URL: smb://fileserver.example.com/share/
クロール間隔: 1日1回
スレッド数: 5
深さ: 空欄(無制限)

認証情報の設定

認証が必要なサイトやファイルサーバーにアクセスする場合は、認証情報を設定します。

  1. 管理画面で「クローラー」→「ウェブ認証」(ファイルサーバーの場合は「ファイル認証」)を選択

  2. 「新規作成」をクリック

  3. 認証情報を入力:

    ホスト名: wiki.example.com
    ポート: 443
    スキーム: Basic
    ユーザー名: crawler_user
    パスワード: ********
    

    注釈

    「スキーム」は Basic / Digest / NTLM / Form から選択します。 また、「ウェブ設定」(ファイル認証の場合は「ファイルシステム設定」)で 対象のクロール設定を必ず選択してください。認証情報はクロール設定に ひも付けて使用されます。

  4. 「作成」をクリック

クロールの実行

手動実行

設定したクロールをすぐに実行する場合は、「スケジューラー」メニューからクロール用の ジョブを起動します。

  1. 「スケジューラー」メニューを開く

  2. 「Default Crawler」ジョブを選択

  3. 「今すぐ開始」ボタンをクリック

  4. ジョブの実行状況を確認

注釈

クロール設定(ウェブ/ファイルシステム)の一覧画面には個別の「開始」ボタンは ありません。クロールはスケジューラーのジョブ単位で実行されます。 「Default Crawler」ジョブは、有効になっている全てのクロール設定を対象に実行されます。

スケジュール実行

定期的にクロールを実行する場合:

  1. 「スケジューラー」メニューを開く

  2. 「Default Crawler」ジョブを選択

  3. スケジュール式を設定(Cron形式)

    # 毎日午前2時に実行
    0 2 * * *
    
    # 毎時0分に実行
    0 * * * *
    
    # 月曜から金曜の午後6時に実行
    0 18 * * 1-5
    
  4. 「更新」をクリック

注釈

Fess のスケジューラーは cron4j 形式のスケジュール式を使用します。 フィールドは「分 時 日 月 曜日」の5つで、Quartz のような秒フィールドや ? は使用しません。曜日は 0 (日曜) ~ 6 (土曜) で指定します。

クロール状況の確認

実行中のクロール状況を確認:

  1. 「スケジューラー」メニューを開く

  2. 実行中のジョブを確認

  3. ログで詳細を確認:

    tail -f /var/log/fess/fess-crawler.log
    

    注釈

    上記はRPM/DEBパッケージインストール時のパスです。ZIP展開の場合は logs/ ディレクトリ配下になります。

基本的な設定項目

クロール対象の制限

URLパターンによる制限

特定のURLパターンのみをクロール対象とする、または除外することができます。

含めるURLパターン(正規表現):

# /docs/ 配下のみをクロール
https://example\.com/docs/.*

除外するURLパターン(正規表現):

# 特定のディレクトリを除外
.*/admin/.*
.*/private/.*

# 特定のファイル拡張子を除外
.*\.(jpg|png|gif|css|js)$

深さの制限

リンクをたどる階層の深さを制限:

  • 0: 開始URLのみ

  • 1: 開始URLと、そこからリンクされたページ

  • 空欄(未設定): 無制限(全てのリンクをたどる)

注釈

管理画面の「深さ」フィールドには 0 以上の整数のみ入力できます。 無制限にする場合はフィールドを空欄のままにしてください (内部的には -1 として扱われ、無制限を意味します)。

最大アクセス数

クロールするページ数の上限:

最大アクセス数: 1000

1000ページまでクロールしたら停止します。フィールドを空欄にした場合は無制限(上限なし)になります。

並列クロール数(スレッド数)

同時にクロールするURLの数を指定します。

推奨スレッド数
環境 推奨値 説明
小規模サイト(〜1万ページ) 3〜5 対象サーバーへの負荷を抑える
中規模サイト(1万〜10万ページ) 5〜10 バランスの良い設定
大規模サイト(10万ページ以上) 10〜20 高速クロールが必要
ファイルサーバー 3〜5 ファイルI/O負荷を考慮

警告

スレッド数を増やしすぎると、クロール対象のサーバーに過度な負荷をかけます。 適切な値を設定してください。

注釈

新規作成時のデフォルトのスレッド数は、Webクローラーが 1、 ファイルクローラーが 5 です。また、リクエスト間隔(間隔)のデフォルトは Webクローラーが 10000 ミリ秒、ファイルクローラーが 1000 ミリ秒です。

クロール間隔

クロールを実行する頻度を指定します。

# 時間指定
クロール間隔: 3600000  # ミリ秒(1時間)

# または、スケジューラーで設定
0 2 * * *  # 毎日午前2時

クロール順序

クロール設定の設定パラメーターに config.crawl.order を指定すると、キューから URL を取り出す順序を 変更できます。値には以下のコンポーネント名を指定します。

取り出す順序
sequentialUrlQueueOrder 重み降順、次に発見順(既定値)
randomUrlQueueOrder ランダム(シードはセッションごとに固定)
depthFirstUrlQueueOrder 深い階層から先に取り出す
newestFirstUrlQueueOrder 後から見つかった URL を先に取り出す
weightFirstUrlQueueOrder 重み降順のみ(同じ重みの並びは検索エンジンに任せる)

既定では重みは一律のため、カスタムの UrlQueueWeigher を導入しない限りすべてが同じ重みになり、 sequentialUrlQueueOrder は実質的に発見順での取り出しになります。 sequentialUrlQueueOrder は重みを第一のソートキーとしているため、weigher を導入すれば config.crawl.order を設定しなくても取り出し順が変わります。 weightFirstUrlQueueOrder との違いは同じ重みの場合の扱いだけで、重み付けされた大量のキューに対して 重みだけで次を決めたい場合に選択します。

config.crawl.order=depthFirstUrlQueueOrder

depthFirstUrlQueueOrder は厳密な深さ優先探索ではありません。クローラーは URL をまとめて 取り出し、そのバッチを処理し終えてから次のバッチを取り出すため、処理中に見つかったより深い URL は次のバッチに回ります。キュー全体が 1 つのバッチに収まる規模のクロールでは、どの順序を 指定しても階層ごとの取り出しになります。

解決できないコンポーネント名を指定した場合は警告をログに出力し、既定の順序で動作します。

注釈

以前のバージョンの config.crawl.order=sequentialconfig.crawl.order=random はそのまま指定できます。

ファイルサイズの設定

クロールするファイルサイズの上限を設定できます。

取得するファイルサイズの上限

クローラー設定の「設定パラメーター」に以下を追加:

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>
        </component>
</components>

カスタマイズ例(PDFファイルを5MBまで処理する設定を追加):

<postConstruct name="addMaxLength">
        <arg>"application/pdf"</arg>
        <arg>5242880</arg><!-- 5M -->
</postConstruct>

警告

扱うファイルサイズを増やす場合は、クローラーのメモリ設定も増やしてください。

注釈

ドキュメントサイズが50MBを超える場合は、OpenSearch側の設定も変更する必要があります。 OpenSearchではJSONコンテンツの文字列フィールドの最大長がデフォルトで50MBに制限されています。

opensearch.yml に以下を追加してください:

opensearch.xcontent.string.length.max: 104857600

上記は100MBに設定する例です。詳細は OpenSearchのドキュメント を参照してください。

単語の長さ制限

概要

英数字だけの長い文字列や連続する記号は、インデックスサイズの増加やパフォーマンス劣化を引き起こします。 そのため、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

特定のホストをプロキシから除外:

プロキシから除外するホストは、クロール設定の設定パラメーターではなく、JVMシステムプロパティで設定します。 fess.in.sh (Linux/Mac) または fess.in.bat (Windows) で環境変数 FESS_NON_PROXY_HOSTS を設定してください。

export FESS_NON_PROXY_HOSTS="localhost|127.0.0.1|*.example.com"

全てのクロール設定共通のプロキシ設定

個々のクロール設定でプロキシを指定していない場合に適用される、クローラー共通の プロキシを fess_config.properties で設定できます。

http.proxy.host=proxy.example.com
http.proxy.port=8080
http.proxy.username=proxyuser
http.proxy.password=proxypass

この設定はクローラーが対象に持つ全てのクロール設定に適用されます (クロール設定側で client.proxyHost / client.proxyPort を指定している場合は、 そのクロール設定の値が優先されます)。

システム全体(JVM)のプロキシ設定

クローラーだけでなく、SSO や LLM 連携など Fess のすべてのHTTP通信をプロキシ経由に する場合は、fess.in.sh (Linux/Mac) または fess.in.bat (Windows) で 環境変数を設定します。これらは JVM のシステムプロパティ (-Dhttp.proxyHost など)に変換されます。

export FESS_PROXY_HOST=proxy.example.com
export FESS_PROXY_PORT=8080
export FESS_NON_PROXY_HOSTS="localhost|127.0.0.1|*.example.com"

注釈

FESS_PROXY_HOST / FESS_PROXY_PORT は HTTP と HTTPS の両方に適用されます。 シェルの http_proxy / https_proxy / no_proxy 環境変数は JVM では 参照されないため、これらを設定しても効果はありません。

robots.txt の設定

概要

robots.txt は、クローラーに対してクロール可否を指示するファイルです。 Fess はデフォルトで robots.txt を遵守します。

設定方法

robots.txt を無視する場合は、fess_config.properties を編集します。

crawler.ignore.robots.txt=true

このプロパティのデフォルトは false で、Fess は robots.txt を遵守します。 true に設定すると robots.txt を無視します。

なお、HTMLの robots メタタグ(noindexnofollow など)を無視する場合は、 以下のプロパティを使用します(デフォルトは false)。

crawler.ignore.robots.tags=true

警告

外部サイトをクロールする場合は、robots.txt を遵守してください。 無視すると、サーバーに過度な負荷をかけたり、利用規約に違反する可能性があります。

User-Agent の設定

クローラーのUser-Agentを変更できます。

Webクローラーの場合

Webクローラーには専用の「ユーザーエージェント」フィールドがあります。 クロール設定の編集画面で「ユーザーエージェント」フィールドに値を入力してください。

ユーザーエージェント: MyCompanyCrawler/1.0

注釈

Webクロール設定では、「設定パラメーター」に client.userAgent を指定しても 専用の「ユーザーエージェント」フィールドの値で上書きされます。 Webクローラーでは必ず専用フィールドを使用してください。

ファイルクローラーなどの場合

専用のユーザーエージェントフィールドを持たないクローラーでは、 クロール設定の「設定パラメーター」に追加して指定します。

client.userAgent=MyCompanyCrawler/1.0

エンコーディング設定

クロールデータのエンコーディング

fess_config.properties で設定:

crawler.crawling.data.encoding=UTF-8

ファイル名のエンコーディング

ファイルシステムのファイル名のエンコーディング:

crawler.document.file.name.encoding=

クロールのトラブルシューティング

クロールが開始されない

確認事項:

  1. スケジューラーが有効か確認

    • 「スケジューラー」メニューで「Default Crawler」ジョブが有効か確認

  2. クロール設定が有効か確認

    • クロール設定一覧で対象の設定が有効になっているか確認

  3. ログを確認

    tail -f /var/log/fess/fess.log
    tail -f /var/log/fess/fess-crawler.log
    

クロールが途中で停止する

考えられる原因:

  1. メモリ不足

    • fess-crawler.logOutOfMemoryError がないか確認

    • クローラーのメモリを増やす(詳細は メモリ設定)

  2. ネットワークエラー

    • タイムアウト設定を調整(クロール設定の「設定パラメーター」で指定)

      client.connectionTimeout=5000
      client.soTimeout=30000
      

      client.connectionTimeout は接続確立のタイムアウト、 client.soTimeout はデータ受信のタイムアウトで、いずれも単位はミリ秒です。

  3. クロール対象のエラー

    • 404エラーが多発していないか確認

    • ログでエラー詳細を確認

特定のページがクロールされない

確認事項:

  1. URLパターンの確認

    • 除外URLパターンに該当していないか確認

  2. robots.txt の確認

    • 対象サイトの /robots.txt を確認

  3. 認証の確認

    • 認証が必要なページの場合、認証設定を確認

  4. 深さ制限

    • リンクの階層が深さ制限を超えていないか確認

  5. 最大アクセス数

    • 最大アクセス数に達していないか確認

クロールが遅い

対策:

  1. スレッド数を増やす

    • 並列クロール数を増やす(ただし、対象サーバーの負荷に注意)

  2. 不要なURLを除外

    • 画像やCSSファイルなどを除外URLパターンに追加

  3. タイムアウト設定を調整

    • 応答が遅いサイトの場合、タイムアウトを短くする

  4. クローラーのメモリを増やす

ベストプラクティス

クロール設定の推奨事項

  1. 適切なスレッド数の設定

    対象サーバーに過度な負荷をかけないよう、適切なスレッド数を設定します。

  2. URLパターンの最適化

    不要なファイル(画像、CSS、JavaScriptなど)を除外することで、 クロール時間を短縮し、インデックスの品質を向上させます。

  3. 深さ制限の設定

    サイト構造に応じて適切な深さを設定します。 無制限(-1)は、サイト全体をクロールする場合のみ使用します。

  4. 最大アクセス数の設定

    想定外に大量のページをクロールしないよう、上限を設定します。

  5. クロール間隔の調整

    更新頻度に応じて適切な間隔を設定します。 - 頻繁に更新されるサイト: 1時間〜数時間ごと - あまり更新されないサイト: 1日〜1週間ごと

スケジュール設定の推奨事項

  1. 夜間実行

    サーバー負荷が低い時間帯(例: 深夜2時)に実行します。

  2. 重複実行の回避

    前回のクロールが完了してから次のクロールを開始するよう設定します。

  3. エラー時の通知

    クロール失敗時にメール通知を設定します。

参考情報