在Lucene中搜索具有角色的公共和私有文档

时间:2013-04-15 16:38:37

标签: lucene umbraco lucene.net

我目前正在尝试在Lucene(来自Umbraco)进行搜索,搜索公共文档和受保护的文档,只能由用户的角色查看。我遇到的问题是Lucene会返回所有公共项目和所有受保护的项目,但不会返回角色。

我的原始Lucene搜索是:

+nodeTypeAlias:pdfdocument +isProtected:false (+rolesAllowed:"userrole" +isProtected:true)

有没有人有任何想法? 提前谢谢。

1 个答案:

答案 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才能与您列出的查询匹配。它可能包含多个术语,可能包含falsetrue