Fessで最近の検索を条件ごと再実行する

Fessにログインしているユーザーが、自分の最近の検索をもう一度実行できるようにしました。同じキーワードで何度も資料を探すときに、ラベルや並び順などの条件も復元できます。

検索欄から履歴を選ぶ

標準のbootstrapテーマでは、空の検索欄をクリックするか、下矢印キーを押すと最近の検索を表示します。履歴を選ぶと、キーワードと保存された条件で検索をやり直します。

ページを開いて自動的に検索欄へフォーカスしただけでは履歴を表示しません。文字を入力し始めると通常のサジェストへ切り替わります。

同じ条件の検索はまとめて、新しいものから表示します。キーワードのない検索や2ページ目以降のリクエストは履歴の一覧対象にしません。現在の仮想ホストに対応した履歴を取得します。

設定とAPI

fess_config.propertiesに次の設定を追加しました。

search.history.enabled=true
search.history.size=10

デフォルトは有効で、最大10件を返します。ただし、検索ログを無効にしている場合は、この機能も利用できません。

APIはGET /api/v2/search-historyです。ログインセッションのユーザーIDを使い、検索ログから本人の履歴を取り出します。クライアントが任意に指定できるCookieやパラメーターでユーザーを決める方式ではありません。ゲストやアクセストークンによる呼び出しは対象外です。

保存する条件はキーワード、fields.*のフィルター、ex_q、並び順、明示的に指定した言語です。他のテーマで使う場合は、このAPIを利用する表示機能が必要になります。

履歴がすぐに出ない場合

検索ログは定期的にまとめて保存するため、検索直後の履歴反映には最大でおおむね1分かかります。また、今回の変更前のログには検索条件を保存したsearchParamsがないため、古い検索は履歴に表示しません。保存期間は既存の検索ログの削除設定に従います。

あわせて、起動時に設定・ログ・ユーザー系インデックスへ不足する標準フィールドを追加する処理を入れました。これにより、アップグレード済み環境でもsearchParamsを想定した定義で追加できます。既存フィールドの型は変更せず、検索文書インデックスは対象外です。

よく使う検索を条件ごと再利用できるようになり、繰り返し資料を探す際の操作を減らせます。

関連PR

Fessの検索ログを分析ダッシュボードで確認してCSV出力する

Fessの管理画面にある検索ログを、検索の利用状況を把握できる分析ダッシュボードに変更しました。検索数だけでなく、ゼロヒット率、クリック率、応答時間などをまとめて確認できます。あわせて、ログや分析結果をCSVでダウンロードする機能も追加しました。

タブで分析項目を切り替える

検索ログ画面の入口は概要ダッシュボードになり、クエリ、クリック、パフォーマンス、ユーザーの各タブで詳しいデータを確認できます。個別のログ一覧は「ログ」タブへ移動しています。

概要では検索数、ユーザー数、ゼロヒット率、クリック率、平均応答時間をカードと推移グラフで表示します。前の期間との比較もできるため、コンテンツや検索設定を変更した後の傾向を追いやすくなります。

期間は今日、昨日、直近7日・28日・90日などのプリセットから選べます。任意の日付範囲は最大366日で、アクセス種別や表の表示件数も指定できます。日付の区切りはサーバーのタイムゾーンに従います。

検索改善につながる指標

クエリごとの平均ヒット数、クリック率、平均クリック順位に加え、ヒットしているのにクリックされないクエリも確認できます。ゼロヒットなら情報や同義語の不足、ゼロクリックなら結果のタイトルや順位などを調べるきっかけになります。

パフォーマンスでは平均値だけでなくp50、p95、p99や応答時間の分布を表示します。ユーザーのタブでは新規・再訪の状況、曜日と時間帯のヒートマップ、言語や参照元などを確認できます。

CSVで取り出す

ログタブの「CSVをダウンロード」から、現在の条件に一致する検索、クリック、お気に入り、ユーザー情報のログを出力できます。新しいものから順にストリーミングで出力し、このログ出力には行数上限を設けていません。

分析タブでは各表やグラフ、KPIのCSVをダウンロードできます。画面と同じ期間・比較条件・アクセス種別を使い、KPIはmetric, unit, value, previous, change形式、ヒートマップは曜日ごとにh00からh23を並べた形式になります。

CSVの数値は表示用の整形前の値です。割合は0〜1、時間はミリ秒なので、表計算ソフトで扱うときは表示形式を合わせてください。文字コードはcsv.file.encodingに従い、UTF-8ではBOMを付けます。数式と解釈される文字で始まるテキストには保護用の引用符を付けます。

データの読み方の注意

クエリ単位のクリック指標には、検索語を保存するようになった後のクリックログを利用します。古いクリックログまでさかのぼって同じ精度で分析できるわけではありません。また、ユーザー数などの集計には近似値が含まれます。

閲覧には従来と同じ検索ログの管理権限、または閲覧専用権限を使います。大量のログ出力で検索エンジンが途中で失敗した場合はCSVが途中で切れる可能性があるため、必要な期間に絞って利用してください。

関連PR

Fessの検索結果に自分のタグを付けて文書を整理する

Fessの検索結果に、ログインしたユーザーがタグを付ける機能が追加されました。「あとで読む」「提案資料」のような名前で文書を整理し、タグから検索結果を絞り込めます。

タグ付けを有効にする

初期状態では無効です。fess_config.propertiesに次の設定を行い、設定変更を反映してから利用します。

user.tag.enabled=true
user.tag.name.max.length=50
user.tag.max.document.tags=100

タグ名の長さは初期値で50、1文書に付けられるタグ数は100です。画面の対応は同梱のbootstrapテーマです。追加・削除にはログインが必要で、アクセストークンだけでは代替できません。検索で閲覧できない文書にはタグを付けられません。

タグをラベルとして管理する

タグは種類がtagのラベルとして保存します。同じ名前を追加すると同じタグを利用し、追加したユーザーをそのタグのパーミッションに加えます。名前はNFKC正規化と空白の整理を行い、制御文字などを含む名前を拒否します。

管理画面のラベル設定から、グループやロールへ共有できます。タグの対象はURLの完全一致で管理するため、再クロールやインデックスの再構築でもタグ情報を保持できます。

ユーザーの削除操作は、自分をタグのパーミッションから外す動作です。別のユーザーやグループ、ロールが残っているときは、タグそのものと対象文書の関連は残ります。

移行と共有時の注意

既存の文書インデックスにはtagをkeyword型で追加するか、再インデックスを行ってから有効化してください。自動の動的マッピングに任せると、絞り込みに適した型にならない可能性があります。

タグもラベル取得件数の上限page.labeltype.max.fetch.sizeに含まれます。初期値は1000で、上限に達すると新しいタグを作成できません。管理画面でタグを変更した場合は、再クロールかラベル更新ジョブを実行するまで文書側の値が残ります。

表示するタグやファセットは呼び出したユーザーのラベル権限で絞ります。ただし、名前から算出した値を指定して検索すると、表示権限のないタグについても自分が閲覧できる文書との関連を推測できる制限があります。機密情報の分類をタグ名だけで保護する運用には注意が必要です。

利用できるバージョン

Fess 15.9.0から使えるようになる予定です。

関連PR