【问题标题】:Searching for Public and Private documents with roles in Lucene在 Lucene 中搜索具有角色的公共和私人文档
【发布时间】:2013-04-15 16:38:36
【问题描述】:
我目前正在尝试在 Lucene(来自 Umbraco)中构建一个搜索,该搜索可以搜索只有用户角色才能看到的公共文档和受保护的文档。我遇到的问题是 Lucene 返回所有公共项目和所有受保护项目,但不是按角色。
我的原始 Lucene 搜索是:
+nodeTypeAlias:pdfdocument +isProtected:false (+rolesAllowed:"userrole" +isProtected:true)
有人有什么想法吗?
提前致谢。
【问题讨论】:
标签:
lucene
umbraco
lucene.net
【解决方案1】:
您的查询并没有真正按照您的意图进行。
+nodeTypeAlias:pdfdocument 查询将只返回 pdf 文档。
+isProtected:false 查询将只返回公共文档
(+rolesAllowed:"userrole" +isProtected:true) 查询将首选但不要求匹配“用户角色”的文档,这些文档是受保护的。但是,由于上述术语会阻止对受保护文档的任何匹配,因此我们不应该看到这一点。
或者,以不同的方式重写(您的查询不严格映射到 AND/OR 语法):
nodeTypeAlias:pdfdocument AND isProtected:false AND OPTIONALLY (rolesAllowed:"userrole" AND isProtected:true)
我相信您正在寻找的查询更像是:
+nodeTypeAlias:pdfdocument +(isProtected:false (+rolesAllowed:"userrole" +isProtected:true))
顺便说一句,可以改写为:
nodeTypeAlias:pdfdocument AND (isProtected:false OR (rolesAllowed:"userrole" AND isProtected:true))
但这并不能真正解释您描述的行为。如果它返回所有文档,包括公共文档和受保护文档,我怀疑您需要查看 isProtected 字段中实际存储的内容。该字段必须包含 false 才能匹配您列出的查询。它可能包含多个术语,可能同时包含false 和true。