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

Fessのクロール用JVMオプションを改行区切りで設定する

Fessのクロール用メモリを変更するとき、jvm.crawler.optionsへ-Xms128m -Xmx512mのようにスペースで並べると、JVMが起動できない場合があります。この設定は改行で引数を分割するため、Java propertiesの継続行と改行文字を使って記述します。。

既定の全オプションを残して編集する

15.9開発版の既定値には-Xms128m、-Xmx512m、-XX:MaxMetaspaceSize=128mなどが含まれています。jvm.crawler.optionsを上書きすると、ヒープだけでなく他の全オプションも置き換わります。

fess_config.propertiesで既存のjvm.crawler.options全体を探し、ヒープの行だけを書き換えます。次の例は、その中の変更する2行だけの抜粋です。これだけで設定全体を置き換えないでください。

-Xms256m\n\
-Xmx1g\n\

\nは値の中の改行区切り、行末の\はpropertiesファイルで次の物理行へ続ける記号です。1行に1つのJVM引数を記述します。空白区切りだと全体が1引数になり、Invalid initial heap sizeなどのエラーでクロールが開始しません。

メモリ値は例であり、全環境に推奨するサイズではありません。コンテナやホストの上限を確認してください。またFess本体用のFESS_HEAP_SIZEと、別プロセスで動くクローラーの設定を混同しないようにします。

起動失敗を確認する

設定反映後にクロールジョブを実行し、クローラーの起動ログとジョブログで、JVMが起動して実際に処理が進むことを確認してください。古いスペース区切りの例や、必要な既定オプションを消していないかを点検します。

同じ文書修正では、HTTPアクセスの負荷制御・リクエスト制限の診断メッセージがINFOであることも補足されています。Fess本体の既定ログレベルwarnでは表示されないため、調査する場合はFESS_LOG_LEVEL=infoへ変更して再起動するか、対象LoggerをINFOへ設定します。クローラーの既定ジョブはINFOであり、本体と同じログ設定とは限りません。

関連PR

Fessのバックアップ復元で確認したい更新日時・暗号鍵・ログ出力

Fessの開発版に、古いバックアップによる設定の上書きを避ける変更と、クロール用認証パスワードを暗号化して保存する変更が入りました。ログのバックアップが途中で打ち切られた場合の警告も追加されています。サーバー移行では、ファイルを取得できたかだけでなく、復元対象と暗号鍵を確認する必要があります。

更新日時によって復元対象を選ぶ

管理画面のバックアップから.bulkをアップロードした場合、数値のupdatedTimeを持つドキュメントは、保存済みの同じIDが存在しない、保存済みの更新日時がない、またはバックアップの方が新しい場合に書き込まれます。同じ日時や古い内容はスキップします。この動作に新しい有効化設定はありません。

同梱スケジュールジョブのupdatedTimeは15.8と15.9でともに0です。15.8のバックアップを新しい15.9環境へ復元するときも、既にある15.9の標準ジョブを残し、旧Groovy版のジョブへ戻してしまう問題を避けます。利用者が編集したジョブや追加したジョブは、その更新日時と復元先の状態で結果が変わります。

updatedTimeがない、または数値ではないドキュメントは通常どおり取り込みます。また実装上、更新日時の取得・比較で例外が発生した場合も取り込みを続けます。全設定の巻き戻しを防ぐ仕組みや、指定日時への完全復旧を保証する仕組みではありません。スキップの記録はfess.logのINFOレベルなので、ログレベルによっては表示されません。

認証パスワードと暗号鍵を引き継ぐ

Web認証・ファイル認証のpasswordは、保存時にapp.cipher.keyを使って暗号化されます。設定バックアップのfess_basic_config.bulkとfess_config.bulkにも暗号化値が入り、まだ平文で保存されている旧設定もバックアップ出力時に暗号化します。既存の平文設定を一括で書き換える移行処理ではなく、設定を保存し直した時に保存形式が変わります。空のパスワードや既に暗号化された値はそのまま扱います。

移行先では、元のfess_config.propertiesのapp.cipher.keyを安全に引き継いでください。異なる鍵では認証パスワードや暗号化済みクロールパラメーターを復号できず、クロールが失敗します。新しい復号エラーには、設定の種類・IDやパラメーター名と、鍵を確認する案内が入ります。ただし問題の設定だけを自動で隔離してクロールを続ける変更ではありません。

以前の版で作成した平文パスワード入りバックアップも読み込めます。暗号化対象は認証のパスワードなどであり、バックアップ全体ではありません。その他の値は平文で含まれるため、.bulkと暗号鍵の両方を機密情報として管理します。

ログのバックアップはHTTP 200でも完全とは限らない

検索・クリック・お気に入り・チャット・ユーザー情報のログ出力は、CPU負荷が高い状態が続くと途中で打ち切られます。関連する初期値はadaptive.load.control=50、index.backup.log.load.timeout=60000(ミリ秒)です。

今回の変更では、出力名、書き込んだ行数、これらの設定名をWARNで知らせます。ダウンロードのHTTPステータスは200のままで、ファイル形式も変わりません。最終行を書いた直後にも判定するため、警告だけから欠落件数は決められません。

バックアップ後はfess.logを確認し、途中終了の警告があれば低負荷の時間帯に再取得して行数などを確認してください。負荷しきい値や待機時間を変更する場合は、バックアップ処理が検索サービスへ与える負荷も確認します。

移行前に揃えるもの

15.9以降でユーザータグを使う環境では、tag_typeを含むfess_config.bulkも取得します。fess_basic_config.bulkにはユーザータグ、クロール情報、障害URL、ジョブログ、サムネイルキューなどが含まれません。辞書ファイルも管理画面のバックアップとは別に保管してください。

ログの*.ndjsonはダウンロードできますが、管理画面のアップロードによる復元対象ではありません。またインデックス出力のindex.export.exclude.fieldsは開発版でcache,tagが初期値です。用途の異なる設定バックアップ、ログ出力、文書インデックス出力を区別し、試験環境で復元後のジョブと認証付きクロールを確認してから移行します。

関連PR