概要
各検索レスポンスには、合計結果カウントとファセットバケットカウントが含まれます(サーチバー検索やファセット設定によるヘッドレス検索APIコールのようなファセット検索の場合)。 動的パーミッションをサポートするアセットの場合、インデックス化されたビューパーミッションは近似値であるため、これらのカウントは正確であることを保証するものではありません。
カウントの近似値は、ユーザーのパーミッションが変更されるたびにアセットを永続化し、インデックスを再作成するパフォーマンスコストとのトレードオフとして、一般的に許容されるものです(例えば、フォルダのパーミッションが変更された場合、正確性を維持するためにすべてのアセットを更新する必要があります)。
これらの近似値のため、ユーザーは以下のような動作を経験する可能性があります:
- ファセット・バケット・カウントと合計結果カウントは、ユーザーがアクセスできる実際のアセット数とは異なります、
- ファセット・バケット・カウントと合計結果カウントは、ページごとに変更されることがあります、
- カウント値を表示するファセットは、選択しても結果が返らない場合があります。
イメージファセットバケットカウント、結果合計、およびページネーションは、動的ビュー許可近似値に基づいています。
動的パーミッション継承
親アセットまたはフォルダのパーミッションを設定することで、アセットのビューパーミッションを制御することができます。 親レベルのパーミッションは、ドキュメントとメディア(フォルダとファイル)、ウェブコンテンツ(フォルダと記事)、メッセージボード(カテゴリとスレッド)、ブックマーク(フォルダとエントリ)、Wiki(ノードとページ)、およびカテゴライズ(語彙とカテゴリ)で使用できます。
中でも View Permission Dynamic Inheritance フレームワークは、実行時にアセットのパーミッションを計算し、ユーザーがアセットを閲覧できるかどうかを判断します。. このランタイム計算により、フォルダのパーミッション変更によって影響を受けるすべてのアセットのインデックスを再作成するパフォーマンス・コストが軽減されます。
Dynamic Permissions Inheritanceフレームワークアプローチの副作用として、データベースと検索エンジンに保存されているパーミッションは近似値であることが挙げられる。 これらの保存されたパーミッションは、ファセット・バケット・カウントと合計結果カウントを表示するときに使用されるため、ユーザーが表示する権限よりも多くのアセットが反映される可能性があります。 これらのカウントは、ユーザーがページを移動することによっても変化する可能性があります。 これらの誤カウントにかかわらず、ユーザーは閲覧権限のないアセットを閲覧することはできない。
注:アセットのパーミッションを直接割り当てることで、Dynamic Permission Inheritanceフレームワークを回避し、カウントの近似値を削除することができます。
正確さとパフォーマンス
検索時、Liferayは検索エンジンからドキュメントを受け取ります。 これはLiferayアプリケーションレイヤーでドキュメントをポストフィルターし、ユーザーが閲覧する権限を持っていないものを取り除きます。 現在の検索ページを埋めるだけの文書が返されるまで、このプロセスを繰り返す。
よりスピーディーな検索体験を保証するため、このデフォルトの動作を推奨するが、パフォーマンスを犠牲にしてファセットと合計結果数の精度を向上させる方法がある。
システム設定 システム設定 > 検索] の下で、[検索結果のデフォルト許可フィルタ] を設定できます。 正確なカウントしきい値を設定することができます。
例えば1000に設定すると、1000の文書が検索エンジンから返され、ユーザーが閲覧できる数まで絞り込まれます。 返されたすべての文書のファセットバケットカウントと合計結果カウントは正確であろうが、検索エンジンによって返されなかった1000を超える文書については、これらの数値は概算値に加算される。
Permission Filtered Search Result Accurate Count Thresholdを使用する場合は、Search Query Result Window Limitを同じ値に変更して、実行される検索数を減らすことをお勧めします。
カスタムファセットウィジェットに関する考察
Dynamic Permissions InheritanceはCustom Facetの動作に影響を与えます。 このファセットは、ポータルのパーミッションチェックをバイパスし、追加の表示コンテキストレイヤー「ポストフィルタリング」なしで、検索レスポンスから直接集計フィールドを利用します。 これにより、インデックスから該当するフィールドを使用して集計するようにカスタムファセットを構成できます。
その結果、ファセット・バケットは、アセット・フォルダやカテゴリなど、ユーザに閲覧権限がないエンティティを参照する可能性があります。 (この行動はしばしば「ゴースト・ファセット」問題と呼ばれる)。
画像A: 165100は、検索しているユーザーには閲覧権限がないフォルダへの参照です。
画像B:ファセットバケット165100がクリックされた後、ユーザーはフォルダやその内容を表示する権限を持っていないため、結果は返されない。
これに対処するには、カスタムファセット用のカスタムウィジェット表示テンプレートを作成します。 テンプレート・コード内で、基礎となるエントリーを取得するためにサービスまたはRESTコールを行うことができます。 VIEW 権限がないために取得できないエントリは、収集したバケットを繰り返しながら、単に表示から除外することができます。