【发布时间】:2011-11-17 10:27:11
【问题描述】:
我正在使用带有 ACL 的 Spring Security 来保护我的应用程序中的文档。另一方面,我使用 Hibernate Search(在 lucene 之上)来搜索文档。此搜索还支持分页。 (文档只是存储在数据库中的文档的元数据。)
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);
QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory().buildQueryBuilder().forEntity(Document.class).get();
Query query = queryBuilder.keyword().onFields(fieldNames.toArray(new String[0])).matching(searchQuery)
.createQuery();
FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(query, Document.class);
fullTextQuery.setFirstResult(pageable.getFirstItem());
fullTextQuery.setMaxResults(pageable.getPageSize());
现在我必须将分页与 ACL 结合起来。我目前唯一的想法是从 FullTextQuery 中删除分页,读取所有搜索结果文档,通过 ACL 过滤它们,然后手动进行分页。但我不喜欢这种解决方案,因为它会加载所有文档,而不仅仅是页面的一个。
有人有更好的主意吗?
【问题讨论】:
标签: java hibernate lucene acl hibernate-search