FessのSharePointクロールで除外設定と空白入りURLを確認する

FessのSharePointデータストアで、除外した文書ライブラリーが検索対象に残る問題と、名前に空白があるリストなどを検索結果から開くと404になる問題の修正がマージされました。利用中のクロール設定を見直すときに、確認したい点をまとめます。

除外したライブラリーがリストとして取り込まれる問題

SharePointの文書ライブラリーは、フォルダー一覧だけでなくリスト一覧にも現れます。従来はsite.exclude_folderでフォルダーとしてのクロールを止めても、同じライブラリーをリスト側から処理してしまう場合がありました。Shared Documentsを除外した場合も、予備の探索経路で再び対象になる問題がありました。

修正後は、列挙された最上位フォルダーを除外対象も含めて覚えておき、リスト側からの重複取り込みを防ぎます。

たとえば、既存のデータストア設定のパラメーター欄に、対象ライブラリー名に合わせて次を指定します。

site.exclude_folder=Library2

この設定の初期値は未指定で、利用者が追加する除外条件はありません。組み込みの除外対象は別にあります。値は最上位フォルダーのタイトルに対する正規表現で、複数指定はカンマ区切りです。完全一致を意図するなら、^Library2$のように明示できます。正規表現の記号を含む名前は適切にエスケープしてください。

適用されるのはサイト全体をクロールする場合です。site.list_id、site.list_name、site.doclib_pathで単一リストや文書ライブラリーを指定するモードの除外設定にはなりません。修正対象も、フォルダー一覧に現れるライブラリーの再取り込みであり、すべてのリストを名前で除外する新機能ではありません。

設定を保存して修正を含むプラグインでクロールした後は、除外対象の文書が検索結果に残っていないか確認します。この修正だけで既存インデックスの文書が即時削除されるわけではないため、古い文書の削除処理が実行される設定と範囲も確認してください。クロール除外はSharePoint側のアクセス権設定の代わりにはなりません。

名前に空白があるリストを開けない問題

検索対象のURLに空白があると、検索結果から移動する際に空白が+へ変わり、別のパスとして扱われる場合がありました。たとえば次のURLです。

修正前: /sites/site1/Lists/Blank+list/DispForm.aspx?ID=2
修正後: /sites/site1/Lists/Blank%20list/DispForm.aspx?ID=2

15.9.x向けのSharePointプラグインでは、表示フォームURLの空白を%20として登録します。リスト項目、ライブラリーファイル、項目の添付ファイルが共有する処理の修正で、追加の有効化設定はありません。空白のないURLや、文字としての+は変えません。

空白入りURLは登録される値が変わるため、文書IDも変わります。次回クロールで新しい文書として取り込まれ、旧URLの文書は古い文書の削除工程で片付ける必要があります。更新直後は、新旧文書の重複とリンク先を確認してください。

15.10向けの開発ブランチでは、Fess本体のリダイレクト時のエンコードを修正しています。こちらはパスマッピングのfunction:encodeUrlにも適用されます。15.9.xのプラグインで登録URLを変える対応とは適用箇所が異なるため、利用するFessとプラグインの系列をそろえて確認してください。

関連PR

Fessの仮想ホストごとにユーザータグを管理する

部署ごとに仮想ホストを分けてFessを利用している場合、別の部署向けに作ったタグが「マイタグ」に混ざったり、同じURLの文書へ一律に付いたりすると、検索結果を整理しにくくなります。15.9開発版では、タグ一覧と文書への反映を仮想ホストに合わせる変更がマージされました。同梱bootstrapテーマのマイタグ表示も整理されます。

利用条件と初期値

タグ機能の初期値はuser.tag.enabled=falseです。対応版のfess_config.propertiesで次の設定を行い、反映後にログインしたユーザーで利用します。

user.tag.enabled=true

タグAPIはログインセッションを使います。アクセストークンだけではログインを代替できません。/api/v2/ui/configのfeatures.user_tagで有効状態を確認できます。

タグ名の最大長はuser.tag.name.max.length=50、1ユーザーのタグ数の上限はuser.tag.max.tags=1000が初期値です。今回の仮想ホスト対応はタグ数の上限をホストごとに分ける変更ではありません。設定上のタグ名は正規化されるため、同じユーザーは仮想ホストをまたいで同じ名前のタグを別々には作れません。

仮想ホストのヘッダー設定virtual.host.headersの初期値は空です。すでに仮想ホストを設定している環境で、検索リクエストが対応するキーに一致していることと、対象のWeb・ファイル等のクロール設定にも同じキーが指定されていることを確認してください。

リクエストに合わせてタグを表示する

タグには作成したリクエストの仮想ホストが記録されます。仮想ホストAに一致するアクセスでは、GET /api/v2/tagsが返す自分のタグと、文書タグAPIの追加候補addableは、Aのタグだけになります。検索結果のタグやファセットに対してすでに行われていた絞り込みと、マイタグの一覧が揃います。

対象タグ・アクセス動作
リクエストと同じ仮想ホストのタグ自分のタグ一覧と追加候補に表示
別の仮想ホストのタグ、仮想ホスト未設定のタグ一致するホストの一覧・追加候補には表示しない
非表示のタグをIDで変更・削除・文書へ追加not_found(404)
別ホスト等に同名タグがあり、名前で文書へ追加conflict(409)
どの仮想ホストにも一致しないリクエスト仮想ホストで絞らず、自分の全タグを一覧に返す

最後のケースがあるため、仮想ホストを設定しただけですべてのアクセス経路が分離されるとは限りません。利用するURLやプロキシ経由のヘッダーが想定した仮想ホストに一致することを確認してください。タグによる分類は文書の閲覧権限の代わりにはなりません。

クロール設定に合わせて文書へ反映する

同じURLでも、別の仮想ホスト向けにクロールされた文書は別々に扱われます。仮想ホストAのタグは、クロール設定にAが含まれる文書だけへ反映されます。この判定は再クロール、tag_updaterジョブ、文書にタグを付けた後のインデックス更新に適用されます。

ただし、仮想ホストを持たないタグはどの文書にも適用され、文書側に仮想ホストがない場合もURLに付いたタグを制限しません。既存文書に今回の規則を反映させる場合は、対応版で再クロールするか、tag_updaterジョブを実行して確認します。

文書のタグ編集画面は、従来どおりURLに付いたタグを一覧にします。同じURLを複数の仮想ホストでクロールしていると、編集画面には見えても、その文書のインデックスには付かないタグが表示される場合があります。画面の一覧だけで反映を判断せず、対象ホストから検索結果とタグの絞り込みを確認してください。

既存タグが見えなくなった場合

仮想ホスト導入前や、どの仮想ホストにも一致しないアクセスで作ったタグには、仮想ホストがありません。従来は各ホストの自分のタグ一覧に表示されましたが、変更後は一致する仮想ホストからの一覧で非表示になります。削除されたとは限らないため、同名タグを作り直す前に管理者がタグタイプの管理画面で設定を確認します。

必要なタグには対象の仮想ホストを設定し、不要なものは管理画面で整理できます。文書側にも変更を反映するため、対応版のtag_updaterまたは再クロールを実行して確認してください。別ホストで同じ名前を使う場合は、部署名を含めるなど、ユーザー単位で重複しない命名にします。

マイタグの表示変更

同梱bootstrapテーマでは、マイタグが見出しとタグ数のバッジを持つカード表示になります。各行にはタグ名、対象件数、共有スイッチ、名前変更と削除のアイコンをまとめ、狭い画面では操作部が折り返されます。タグ名からの検索絞り込み、名前変更、削除確認の操作を行えます。

この表示変更は同梱bootstrapテーマが対象です。外部テーマや独自に編集したテーマへ自動的に同じ見た目が適用されるとは限りません。仮想ホストに対応するAPIの変更と、画面資産の更新をそれぞれ確認してください。

関連PR

Fessでクロール設定が100件を超えるときに確認する上限

Fessに多数のクロール設定を登録している場合、設定が有効でも実行対象へ読み込まれないことがあります。開発版では、読み込み件数の上限に達したことを警告する変更がマージされました。設定名にはpageが含まれますが、管理画面のページサイズではなく、クロール対象として読み込む設定の総数を制限します。

対応状況と初期値

2026年10月13日時点の最新公開リリースはFess 15.8.0です。この記事は15.9開発版の実装と文書修正を説明し、警告の利用には修正を含むビルドが必要です。

fess_config.propertiesの初期値は次のとおりです。

page.web.config.max.fetch.size=100
page.file.config.max.fetch.size=100
page.data.config.max.fetch.size=100

ウェブ、ファイルシステム、データストアで、それぞれ最大100件を読み込みます。対象の設定は並び順、次に名前の昇順で選ばれ、上限を超えた分はクロールされません。今回の変更で上限や対象の選び方が自動で変わるわけではありません。

警告は取りこぼしの可能性を示す

読み込めた件数が上限に達すると、該当する設定名と上限値をWARNで知らせます。実際に101件目が存在するかまで調べる処理ではないため、ちょうど100件でも警告の対象になり得ます。

設定IDで対象を絞り、要求したID数が上限以下の場合には警告しません。また同じ設定キーの警告を毎回繰り返す仕組みではありません。警告が出続けないことを、全設定が実行された証拠にしないでください。

必要件数に合わせて上限を設定する

例えばウェブ設定が150件ある場合は、ウェブ側の上限を必要件数以上へ変更します。200は例で、推奨値として固定するものではありません。

page.web.config.max.fetch.size=200

RPM・DEB版では/etc/fess/fess_config.properties、ZIP版ではapp/WEB-INF/classes/fess_config.propertiesを確認し、変更後にFessを再起動します。ZIP版ではFESS_CONF_PATHへ同名ファイルを置くだけではWebアプリケーションの設定を上書きできない点にも注意してください。

再起動後に対象ジョブを実行し、上限に関するログと各設定のクロール結果を確認します。ファイル・データストアも同様に、実際の登録数に応じてそれぞれの上限を設定します。

同時実行数と処理速度は別に調整する

読み込み件数を増やしても、全部が同時に始まるわけではありません。「システム > 全般」の「同時クローラー設定」は初期値5で、ウェブとファイルシステムを合わせた実行数と、データストアの実行数にそれぞれ適用されます。設定の開始は各系列で5秒間隔です。

さらにウェブクロールの初期値は1スレッド、リクエスト間隔10000ミリ秒です。待機時間だけで考えても1時間あたり最大約360URLとなり、取得・解析の時間が加わると少なくなります。読み込み上限、同時実行設定数、各設定のスレッド数と間隔を区別し、対象サイトと検索エンジンへの負荷を見ながら調整してください。

関連PR