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

    【讨论】:

    • 准确!谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 2014-01-03
    • 1970-01-01
    • 2015-12-11
    • 2016-05-30
    • 1970-01-01
    • 2018-08-19
    相关资源
    最近更新 更多