我目前正在尝试在Lucene(来自Umbraco)进行搜索,搜索公共文档和受保护的文档,只能由用户的角色查看。我遇到的问题是Lucene会返回所有公共项目和所有受保护的项目,但不会返回角色。
我的原始Lucene搜索是:
+nodeTypeAlias:pdfdocument +isProtected:false (+rolesAllowed:"userrole" +isProtected:true)
有没有人有任何想法? 提前谢谢。
答案 0 :(得分:1)
你的查询并没有真正按照你的意愿行事。
+nodeTypeAlias:pdfdocument
查询将只返回pdfdocuments。
+isProtected:false
查询将仅返回公开文档
(+rolesAllowed:"userrole" +isProtected:true)
查询会更喜欢(但不要求)符合“userrole”的文档,这些文档受到保护。但是,由于上述术语阻止了受保护文档的任何匹配,我们不应该看到这一点。
或者,以不同的方式重写(您的查询不严格映射到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
。