想象一下全文搜索的简单场景:带有注释的文章。我也想在评论中通过文本搜索文章。仅这一点就实现起来相当简单。
然而,并不是所有的注释都对所有用户可见。编写注释的用户还可以将其可见性限制为具体角色(因此注释有两个字段:文本和角色)。
是否可以在文章中限制lucene搜索,从而只查看当前用户 (comment.role在当前用户角色集合中)可见的内部评论?
如果是这样的话,请指出正确的方向,我应该如何写这样的查询(最好)或lucene过滤器。
(我正在通过hibernate搜索使用lucene,但是它应该没有什么区别)
发布于 2009-07-07 18:19:29
根据文档,您只需将您感兴趣的角色作为查询中的另一个字段。在您的示例中,类似的内容应该有效:
text:"user query" AND role:"userRole"发布于 2009-07-08 05:27:44
增加了乔斯利斯的答案。如果存在角色层次结构,角色的权限将级联到层次结构中的其他角色。例如,如果对角色“经理”的许可被授予,那么“主管”和“副总裁”也会被允许。
在本例中,您的查询将是
text:"user query" AND (role:"role1" OR role:"role2" OR role:"role3")发布于 2009-07-09 08:48:50
我想不出解决这种情况的好办法,但我可以想出一些不好的办法.
问题是lucene除了文档字段机制之外,没有真正提供任何层次结构支持。
您最好的选择是为每个评论创建一个单独的文档。这样,每个文档都有一个“文本”和一个“角色”字段,因此您知道角色适用于文本。
问题是,现在注释和文章之间没有很好的关联,因此,例如,如果您有一篇包含单词"hibernate“和包含"lucene”的注释的文章,那么搜索"hibernate和lucene“将找不到它。您可以尝试通过在每个文档中将文章和所有注释作为额外字段来改进这一点,但是这样就会有一个非常臃肿的索引,可能还会带来安全问题。
另一种方法是有编号的字段,如comment1、comment2等,然后您可以将role1与comment1匹配。如果您对一篇文章有更多的评论,这将使您的查询变得更大、效率更低。
https://stackoverflow.com/questions/1093817
复制相似问题