私はluceneから最初に検索し、ユーザーがその閲覧許可を持っているかどうかを確認すると思います。ソースコードにアクセスできるかどうかを確認するには、BaseIndexer.searchを参照してください。私はそれをどのようにあなたに示すために、小さなスニペットを添付していますか?
PermissionChecker permissionChecker =
PermissionThreadLocal.getPermissionChecker();
int start = searchContext.getStart();
int end = searchContext.getEnd();
if (isFilterSearch() && (permissionChecker != null)) {
searchContext.setStart(0);
searchContext.setEnd(end + INDEX_FILTER_SEARCH_LIMIT);
}
Hits hits = SearchEngineUtil.search(searchContext, fullQuery);
searchContext.setStart(start);
searchContext.setEnd(end);
if (isFilterSearch() && (permissionChecker != null)) {
hits = filterSearch(hits, permissionChecker, searchContext);
}
うん、それは私が思ったものです。これは非常に非効率的です。何千もの関連する結果があればどうでしょうか?現在のユーザーが実際に見ることができる関連する結果の合計数を取得する前に、このフィルタを通過する必要があります。 –
ページングは問題ではないことに注意してください。一つのページに表示する必要のある結果の数(詩的に聞こえる!)が表示されるまで許可チェックのみが可能ですが、表示できる関連性の高い結果を知るには、この小切手を通過します。このチェックは、状況を悪化させるようなDBへのクエリを実行していると思います!別の方法が必要です! –