1

我目前正在尝试在 Lucene(来自 Umbraco)中构建一个搜索,它搜索公共文档和受保护的文档,这些文档只能由用户的角色看到。我遇到的问题是 Lucene 返回所有公共项目和所有受保护项目,但不是按角色。

我的原始 Lucene 搜索是:

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

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

4

1 回答 1

1

您的查询并没有真正按照您的意图进行。

+nodeTypeAlias:pdfdocument查询将只返回 pdfdocuments。

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

于 2013-04-15T16:57:56.027 回答