Fessのファイルクロールで親へ戻るシンボリックリンクを避ける

ファイルクロールで、同じファイルが長いパスを伴って何度も登録されることがあります。sub/up -> ..のように、子ディレクトリのシンボリックリンクが親へ戻る場合の巡回を避ける修正が、Fess Crawlerへマージされました。

file:のパスが長くなり続ける場合

従来はfile:でディレクトリを一覧すると、リンク経由で同じ木構造へ戻り、sub/up/a.txt、sub/up/sub/up/a.txtのように別URLとして取得を繰り返す場合がありました。深さの上限で止まっても、同じ内容が多数登録されます。

修正では子要素が「ディレクトリへのシンボリックリンク」であるとき、実パスを確認します。現在のディレクトリ自身や実際の親へ戻るリンク、URL上で既に通過したディレクトリへ戻るリンクを、次の取得対象から除外します。a/x -> bとb/y -> aのような相互リンクも対象です。

シンボリックリンクをすべて禁止する変更ではない

FileSystemClientのfollowSymlinkは初期値trueで、既存の指定方法は変わりません。新しい設定項目もありません。通常ファイル、別の場所を指すリンク、壊れたリンクの一覧処理は従来の扱いを維持します。

followSymlink=falseは従来どおりリンクをたどらないための指定ですが、今回の修正は、リンクを利用する構成で特定の循環を除外するものです。このプロパティはCrawlerの初期化パラメーターで、同じ名前のFess全体プロパティが新設されたわけではありません。SMBなど別クライアントの動作を一律に変えるものでもありません。

既存の重複は別途確認する

修正はこれから列挙するURLを抑えます。既にインデックスへ登録された重複文書を自動で削除する機能ではありません。

対象ディレクトリのリンク先を確認し、修正入りのCrawlerを含む環境で小さな範囲を再クロールします。ログのSkipped a symbolic link that leads back to a parent directoryと、繰り返しパスが増えなくなったことを確認してから、古い文書の整理を検討します。実パスの解決に失敗した場合もあるため、深さや対象範囲の既存の制限も引き続き必要です。

関連PR

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です