Fessのコード検索でpath絞り込みとJavaScript・YAMLの分類を改善する

コード検索テーマで path:src/main を指定しても結果が出ない問題や、JavaScript・YAMLが言語ファセットに現れない問題が修正されました。テーマ側の検索式と、クロール時の分類・インデックス定義をそれぞれ更新する変更です。

pathとフレーズの指定

修正を含むcodesearchテーマでは、引用符なし・ワイルドカードなしのpathは前方一致になります。スラッシュなどは検索構文に合わせてエスケープされます。ワイルドカードを指定した場合はその指定を使い、引用符付きなら完全一致です。

path:src/main
path:*Suggester.java
path:"src/main/java/example/App.java"
"new HashMap"

フレーズの引用符や近接指定 "foo bar"~3 を維持し、--verbose は文字列として検索します。単独の先頭ハイフンによる除外は従来どおりです。ファセット操作後も同じ検索式を使います。ただし repo:a OR repo:b の並びや、否定条件の再解析に関する既存の制限は残ります。

初期値と画面操作

ページングは入力したnumではなくAPI応答の page_size に合わせます。標準の最大100件に対し num=500 を指定した場合も、次ページがstart=500になって途中の結果を飛ばすことを避けます。最大件数はサーバー設定に依存します。

幅960px以下ではFiltersボタンから絞り込みパネルを開けます。Escapeで閉じ、/ キーで検索欄へ移動できます。テキスト入力中やIME変換中はショートカットを割り込ませません。閉じたファセットパネルがTab順に残る既存の制限は今回のcodesearch修正では解消していません。

JavaScriptとYAMLを再クロールで分類する

docker-codesearchの conf/fess_config.overlay.properties の index.filetype に、text/javascript=javascript と text/x-yaml=yaml が追加されました。.js / .mjs と .yml / .yaml が対象です。TypeScript、JSX、CJS、Vue、SCSS、TOMLなどは検出上text/plainとなり、txt分類のままです。

既存文書のfiletypeは再クロールで更新します。保存済み文書をコピーするメンテナンスの再インデックスだけでは再計算されません。

スキーマと利用条件

_codesearch の定義には15.9のetag、last_modifier、tagと長音記号の正規化が取り込まれました。既存インデックスのマッピングは自動で変わらず、新規インデックスで定義が適用されます。既存データを更新する場合はバックアップと移行方法を検討し、定義更新だけで完了したと判断しないようにします。

テーマのソース上の版は15.9.8、minFessVersionは15.9です。確認時点のFess正式版は15.8.0なので、修正を含む15.9開発ビルドとテーマを使うための説明です。テーマの版番号をFess本体の正式リリースと混同しないでください。

関連PR

FessのDocSearchテーマで日本語入力とDocker更新時の動作を改善する

DocSearchテーマで、日本語入力、キーボード操作、小さい画面の表示を改善しました。あわせてdocker-docsearchのテーマ同期処理も修正し、稼働中のコンテナーでテーマを更新した際に検索画面が404になる問題を解消しています。

変換確定のEnterで検索しない

コマンドパレットや検索候補の操作では、IME変換中のEnter、矢印、Escapeを検索画面のコマンドとして処理しないようにしました。日本語の変換確定で意図せず検索が実行されるのを防ぐ変更です。実機のIMEによる測定はPRでは行っておらず、合成したcompositionイベントによるテストが中心です。

閉じた検索オプションや旧検索フォームがTab移動の対象から外れ、オプションを開くとフォーカスが中へ移ります。Escapeや外側のクリックで閉じ、開いた操作元へ戻せます。ホーム画面の検索候補も上下矢印、Enter、Escapeで操作できるようになりました。

小さい画面と共有URL

幅768px未満ではヘッダーのナビゲーションをメニューボタンから開けるようにし、Helpやテーマ切り替えなどへアクセスできます。長い検索語の折り返し、ダークモードのロゴ、ラベル名の表示も改善しています。「類似した結果」の状態はsdhとしてURLへ反映され、再読み込みや共有で同じ表示を再現できるようになります。

変更はdocsearchテーマに限定され、他のテーマへ一律に適用されるものではありません。テーマのバージョンは15.9.9、theme.ymlのminFessVersionは15.9です。確認時点のFess最新正式リリースは15.8.0なので、15.9.9というテーマ番号をFess 15.9の正式リリースと混同しないでください。

Dockerでテーマを更新する

docker-docsearchのsetup.shは、ホスト側のテーマディレクトリーを削除して作り直す方式から、中身だけを置き換える方式へ変わりました。bind mountを維持できるため、稼働中のfess01からテーマが消えなくなります。取得や検証に失敗した場合は、既存テーマを置き換えません。

git pull
bash ./bin/setup.sh
docker compose -f compose.yaml restart fess01

HTMLやassetsは次のリクエストから反映できますが、theme.ymlのバージョンなどは起動時に読むため、テーマ更新後はfess01を再起動します。docker compose up -dだけでは、テーマのみの更新を検知してコンテナーを作り直すとは限りません。ブラウザーではアセットが最大1日キャッシュされるので、確認時は強制再読み込みも行います。

初期値と更新時の注意点

テーマ取得元FESS_THEMES_REPOの初期値はhttps://github.com/codelibs/fess-themes.git、FESS_THEMES_REFはmainです。FESS_THEMES_DIRは未設定が初期値で、ローカルのチェックアウトを指定した場合はそのthemes/docsearchを使い、REFは無視されます。mainを使うと開発中のテーマを取得するため、対応するFessとの組み合わせを確認してください。

setup.shはテーマ内のローカル変更を置き換えます。独自編集は事前に保管してください。一方、既存のdata/fess/opt/fess/system.propertiesは上書きしません。Composeの標準構成はまだFess 15.8.0とOpenSearch 3.8.0で、今回の15.9向けテーマを標準構成のまま動作保証する変更ではありません。

15.9移行時はGroovy継続かJavaScript移行を選びます。Groovyを継続する場合は対応するプラグインを起動前に配置し、JavaScriptへ移す場合は起動後すぐ管理画面で既存ジョブを変更します。起動ログの未登録エンジン警告はジョブ以外の設定も確認する手がかりになります。今回の記事は、マージ済みの開発変更と更新時の注意点をまとめたものです。

関連PR

fessctlで一覧のページングと移行対象の取り漏れを確認する

fessctlの一覧取得で、指定したページや件数がFess側に反映されない問題が修正されました。登録件数が多い環境の移行スクリプトでは、同じ先頭ページを繰り返して残りの設定を取り漏らしていたため、ページごとのID確認が重要です。

一覧取得の指定が反映される

Fess 15.8と15.9の管理一覧APIは、GETリクエストのJSON本文から size と page を読みます。従来のfessctlはURLパラメーターだけを送り、サーバーの標準25件が返っていました。修正後はJSON本文にも送り、CLIの既存初期値 --size 100 が実際に適用されます。IDで1件を取得するGETは変更されません。

修正を含むfessctlで、次の2ページのIDが異なることと total を確認します。接続先と管理用アクセストークンは通常のfessctl設定を利用します。

fessctl scheduler list --size 1 --page 1 -o json
fessctl scheduler list --size 1 --page 2 -o json

23種類の一覧取得が共通の修正対象です。Fess 14.xでは今回のPRで動作確認されていません。中間プロキシがGET本文を落とさないことも導入環境で確認します。

JavaScript移行の取り漏れを防ぐ

docker-codesearchの bin/migrate-to-javascript.sh は、同じIDしか増えないページを検出すると、全件に達していなければ失敗終了します。ジョブとデータ設定を両方読み終えてから更新するため、一覧取得失敗で一方だけ移行することを避けます。

移行前には --dry-run で対象を確認します。ページングが効かない旧fessctlでは、1ページに収まる場合を除いて移行を止めるので、先に修正版fessctlを利用してください。旧リリース0.3.0での問題を、単に同じバージョンを再インストールして解消できるとは扱いません。

管理APIの上限を超えない

Fess側にも、一覧APIの件数・ページを結果ウィンドウ内に収める修正が入りました。indexer.max.result.window.size の初期値は10000です。size=10001 は10000に切り詰め、末尾が上限を超えるpageは範囲内の最終ページに補正します。0以下のsize/pageは従来のページャー初期値に委ねます。

上限超えを500にしない改善ですが、ウィンドウを越えて全件を取得できる機能ではありません。終端判定を単なる取得件数の累計にすると同じ最終ページを数えることがあるため、IDの重複と実際の件数を確認してください。

関連PR