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.txt
とtest_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を確認できます。
サイズが上限を超えるファイルの扱い
指定したサイズより大きいファイルが大量にある場合、該当するファイルのクロールをしないようにするという要望が出てくるかもしれません。
対応策としては、以下などが考えられます。
それぞれのケースについて説明します。
クロール設定で対応
今回の例で設定すると、クロール対象から除外するパスに 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
などの問題が発生する可能性があるため、十分な知識が求められます。設定に不安がある場合や専門的なサポートが必要な場合は、商用のサポートサービスを活用することをお勧めします。