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

Fessの11テーマでログイン・再検索・案内表示を改善する

FessのDocuForgeやDocSearchなど、11種類のStaticテーマに、標準のBootstrapテーマで行われていた修正が反映されました。テーマだけを使い続けている環境でも、ログイン後のパスワード変更や、検索語を変えてすぐ再検索するときの操作が改善されます。

ログインからパスワード変更までを同じフォームで扱う

パスワード変更が必要なログインでは、フォームを切り替えた時点でブラウザがログイン完了と判断し、初期パスワードに対する警告を、変更前に表示することがありました。

修正では、ログインと新しいパスワードの入力を同じフォーム内の手順として扱い、変更手順の間は画面へのログイン完了通知を保留します。パスワード欄も必要な場面だけ生成し、プロフィール画面を離れたときには変更フォームを取り除きます。検索欄に保存済み認証情報の候補が出る問題への対策も含みます。

この手順になるのは、ログインAPIがパスワード変更を要求し、ユーザーが編集可能な場合です。パスワードポリシーや認証方式を新しく有効化する設定ではありません。また、PRの検証は自動テストが中心で、稼働中のFessとChromeで警告が出ないことの実機確認は未完了です。ブラウザの警告が必ず消えるとは扱わず、管理者の初回ログインで確認します。

検索語を変えたらすぐにEnterで検索できる

従来は検索後に送信ボタンを3秒間無効にしていたため、画面全体を再読み込みしないStaticテーマでは、検索語を変えてもEnterが反応しない時間がありました。

修正後はボタンを無効にせず、同じページの同じクエリー文字列を3秒以内に再送した場合に重複送信を抑えます。別の検索語や検索条件なら、その間でも送信できます。この3秒はコード内の固定値で、今回追加された管理画面の設定項目ではありません。

管理者の案内HTMLとキャッシュ表示も反映

関連コンテンツや検索画面・ログイン画面の通知では、管理者が設定した画像、太字、class、styleなどを残せる専用のサニタイズ処理を使います。スクリプトやイベント属性をそのまま通すものではなく、チャット回答など一般のHTMLに対する制限は別に維持されます。画像の表示は配信元やブラウザの混在コンテンツ制限にも左右されます。

キャッシュ表示では、元ページのURLを基準に画像・リンク・CSSの相対URLを解決します。外部サイトが停止している場合まで画像を復元する機能ではありません。キャッシュ内のスクリプトを実行しない扱いも維持されます。この点は既存のキャッシュ表示の記事で紹介した修正が、追加テーマにも反映されたものです。

このほか、見出し・ナビゲーションの構造、結果URLのコントラスト、多言語のメッセージとファイルサイズ表示も調整されています。専用の有効化スイッチはなく、修正を含むテーマへ更新して利用します。

Fess 15.9では15.9系のテーマを選ぶ

PR #83の反映後に15.9.xブランチが切られ、PR #84でmainはテーマバージョン15.10.0、最小Fessバージョン15.10へ移行しています。mainから作った最新ZIPをFess 15.9へ入れる手順にはしません。テーマ15.10.0という表記は、Fess本体15.10の正式公開を意味しません。

Fess 15.9向けにソースから用意する場合は、15.9.xブランチのチェックアウトで、例えば次を実行します。

./scripts/package.sh docuforge
# dist/docuforge-15.9.10.zip

管理画面の「テーマ」(/admin/theme/)でZIPをアップロードし、使用するデフォルトテーマを選んで設定します。仮想ホストへ割り当てている場合は、その割り当ても確認します。今回の修正を入れただけでテーマの選択が自動的に変わるわけではありません。配布ZIPの公開状況は別途確認し、独自に変更したファイルがある環境では更新前に差分を控えておきます。

更新後は、初回ログイン、検索直後に語を変えてEnter、通知の画像、キャッシュ内の相対リンクを確認します。文書単位のチャット、最近の検索、エクスポート、ユーザータグなどは今回追加テーマへ移植された機能に含まれません。標準テーマにある機能がすべて揃ったという変更ではありません。

関連PR