search - Liferay、搜索和安全模型

标签 search solr lucene liferay liferay-6

有人有过在 Liferay 上实现需要(中等复杂的)安全模型的搜索的经验吗?您如何处理并非所有从搜索引擎返回的结果都有权查看内容的事实? Liferay 中的内置搜索已经可以做到这一点了吗?如果是,怎么办?

因为在返回后过滤潜在的数千个结果可能会非常昂贵。如果您不通过过滤器传递所有结果,您将不知道您的搜索获得了多少总结果(点击数),您可以作为登录用户“查看”。

最佳答案

我认为它首先从 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);
}

关于search - Liferay、搜索和安全模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10008427/

相关文章:

Solr 多语言搜索

search - 如何在 Solr 中实现具有多个相关项的分面搜索建议?

PHP SolrClient 连接错误

lucene - 为什么在进行模糊搜索时绕过 Solr 过滤器禁用?

database - 如何使用 Lucene 最好地搜索数据库?

hibernate - Lucene 的 ClassCastException

php - 使用非拉丁字符搜索 Geoname 数据库

xslt - XPath 有序优先属性搜索

java - 使用java在文件中搜索unicode字符串

java - 内存不足错误 : Java heap space error when start solr