2

想象一下全文搜索的这个简单场景:带有评论的文章。我也想通过评论中的文字搜索文章。仅此一项就相当容易实现。

但是,并非所有用户都可以看到所有评论。写评论的用户也可以限制它对具体角色的可见性(所以评论有两个字段:文本和角色)。

是否可以限制对文章的 lucene 搜索,使其仅查看当前用户可见的评论(comment.role 在当前用户的角色集中)?

如果是这样,请指出我应该如何去做并编写这样的查询(最好)或 lucene 过滤器的正确方向。

(我通过hibernate-search使用lucene,但应该没有区别)

4

3 回答 3

2

根据文档,您可以将您感兴趣的角色作为查询中的另一个字段提供。在您的示例中,这样的事情应该可以工作:

text:"user query" AND role:"userRole"
于 2009-07-07T18:19:29.317 回答
0

我想不出任何好的解决方案来解决这种情况,但我可以想出一些不好的解决方案......

问题是 lucene 并没有真正提供除文档字段机制之外的任何层次结构支持。

最好的办法是为每条评论创建一个单独的文档。这样,每个文档都有一个“文本”和一个“角色”字段,因此您知道角色适用于文本。

问题是现在你在评论和文章之间没有很好的关联,所以例如,如果你有一篇包含单词“hibernate”的文章和包含单词“lucene”的评论,搜索“hibernate AND lucene”将找不到它。您可以尝试通过将文章和所有评论作为额外字段包含在每个文档中来改进这一点,但是这样您的索引就会非常臃肿,并且可能存在安全隐患。

解决此问题的另一种方法是使用 等编号的字段comment1。然后comment2您可以匹配role1. comment1如果您对一篇文章有​​多个评论,这将使您的查询变得庞大且效率低下。

于 2009-07-09T08:48:50.650 回答
0

添加到乔斯利斯的答案。如果存在角色层次结构,其中对角色的权限将该权限级联到层次结构中的其他角色。例如,如果授予角色“经理”的权限,则同时授予“董事”和“副总裁”的权限。

在这种情况下,您的查询将是

text:"user query" AND (role:"role1" OR role:"role2" OR role:"role3")
于 2009-07-08T05:27:44.233 回答