Fessのクローラーでは、クロール対象のファイルが設定されたファイルサイズの上限を超える場合、そのファイルはクロールされず、検索対象にもなりません。この際、MaxLengthExceededExceptionという例外が発生します。

この機能により、サイズが大きすぎるファイルのクロールを避けることで、リソースを無駄にせず、システムの負荷を抑えられます。そのため、Fessを安定運用し、パフォーマンスを維持するためには、欠かせない設定となります。

今回はクロール対象のファイルサイズ上限の設定について解説します。 なお、この記事では、Fess 14.16とOpenSearch 2.16.0で動作確認を行っています。

設定

クロールするファイルサイズの上限は、ファイルの種類ごとに指定することができます。デフォルトでは、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>


                <postConstruct name="addMaxLength">
                        <arg>"text/html"</arg>
                        <arg>2621440</arg>


                </postConstruct>
        </component>
</components>

ファイルサイズ上限の変更

例えば、HTMLファイル以外のファイルを100MBまでクロールできるように設定するには、defaultMaxLengthを次のように編集します。

<property name="defaultMaxLength">104857600</property>

実際にクロールして確認します。

管理画面でファイルクロール設定を作成します。 管理画面の左メニュー「クローラー」>「ファイルシステム」>「新規作成」をクリックし、パスにクロール対象を指定して「作成」ボタンをクリックしてください。

今回は以下の設定をしました。

項目名 設定値
 パス    file:/srv/test/  

クロール対象の/srv/test配下には以下のファイルを配置しています。ファイルサイズの上限を100Mに設定後、クロールすると、test_10.txttest_1.txtが検索対象になります。

# ls -l /srv/test/
total 1174608
-rw-r--r-- 1 fess fess 1073741824 Sep  6 09:24 test_1000.txt
-rw-r--r-- 1 fess fess   10485760 Sep  6 07:34 test_10.txt
-rw-r--r-- 1 fess fess    1048576 Sep  6 07:33 test_1.txt

クロールが完了後、検索画面で検索すると、指定したファイルサイズ以下のファイルが検索結果として表示されます。

MaxLengthExceededException 発生時のログファイルと障害URL

ファイルサイズの上限を超えるファイルをクロールした場合、fess-crawler.logには以下が出力されます。

2024-09-06T10:07:24.339Z [Crawler-20240906100715-1-2] INFO  Crawling URL: file:/srv/test/test_1000.txt
2024-09-06T10:07:24.592Z [Crawler-20240906100715-1-2] INFO  [h6nNxpEBQGctqpwBiK3r] The content length (1073741824 byte) is over 104857600 byte. The url is file:/srv/test/test_1000.txt

また、ファイルサイズ上限を超えたURLは障害URLとして記録され、管理画面から確認できます。

管理画面の左メニュー「システム情報」>「障害URL」をクリックしてください。「種類」で「 *MaxLengthExceededException 」を入力して検索すると、該当URLを確認できます。

サイズが上限を超えるファイルの扱い

指定したサイズより大きいファイルが大量にある場合、該当するファイルのクロールをしないようにするという要望が出てくるかもしれません。

対応策としては、以下などが考えられます。

  • ・クロール設定で対応:該当ファイルをクロール設定で除外する
  • ・障害数のしきい値で対応:「障害数のしきい値」を設定して障害URLに記録されたURLをクロール対象外にする
  • ・メタ情報取得だけで対応:ファイルから、ファイル名などのメタ情報だけを取得して、コンテンツデータは取得しない
  • それぞれのケースについて説明します。

    クロール設定で対応

    今回の例で設定すると、クロール対象から除外するパスに file:/srv/test/test_1000.txt を設定することになります。

    fess-crawler.logでは以下のような出力になり、クロールされていないことを確認できます。

    2024-09-06T11:09:58.608Z [WebFsCrawler] INFO  Target Path: file:/srv/test/
    2024-09-06T11:09:58.611Z [WebFsCrawler] INFO  Excluded Path: file:/srv/test/test_1000.txt
    2024-09-06T11:09:59.123Z [Crawler-20240906110952-1-1] INFO  Crawling URL: file:/srv/test/
    2024-09-06T11:10:00.708Z [Crawler-20240906110952-1-3] INFO  Crawling URL: file:/srv/test/test_10.txt
    2024-09-06T11:10:00.708Z [Crawler-20240906110952-1-1] INFO  Crawling URL: file:/srv/test/test_1.txt
    

    障害数のしきい値で対応

    管理画面の左メニュー「システム」>「全般」をクリックします。「障害数のしきい値」に障害URLに記録された回数を指定します。例えば、障害数のしきい値を『5』に設定することで、5回障害が発生したURLをクロール対象から除外できます。

    指定した回数を超えたあとは、fess-crawler.logでは以下のような出力になり、クロールされていないことを確認できます。

    2024-09-06T10:56:16.970Z [WebFsCrawler] INFO  Target Path: file:/srv/test/
    2024-09-06T10:56:16.987Z [WebFsCrawler] INFO  Excluded Path from failures: \Qfile:/srv/test/test_1000.txt\E
    2024-09-06T10:56:17.392Z [Crawler-20240906105610-1-1] INFO  Crawling URL: file:/srv/test/
    2024-09-06T10:56:18.905Z [Crawler-20240906105610-1-1] INFO  Crawling URL: file:/srv/test/test_1.txt
    2024-09-06T10:56:18.905Z [Crawler-20240906105610-1-3] INFO  Crawling URL: file:/srv/test/test_10.txt
    

    「障害数のしきい値」を設定する場合、エラーの種類を指定して回数を指定することはできないため、MaxLengthExceededException以外のエラーでもこの設定が適用されることに注意してください。

    他のエラーを除外したい場合は、全般設定で『除外するエラーの種類』を指定します。

    メタ情報取得だけで対応

    クローラー設定の「設定パラメーター」に client.maxContentLength を指定します。 100MB以上のファイルを取得しない場合は以下のように指定します。

    * * *

    ファイルサイズの上限を引き上げる際は、事前にクロールで必要となるメモリー使用量やCPUの負荷をしっかりと見積もることが重要です。不適切な設定を行うと、OutOfMemoryErrorなどの問題が発生する可能性があるため、十分な知識が求められます。設定に不安がある場合や専門的なサポートが必要な場合は、商用のサポートサービスを活用することをお勧めします。