SOLR权限/筛选结果取决于访问权限

Man*_*nny 17 solr search-engine

例如,我有文档A,B,C.用户1必须只能看到文档A,B.用户2必须只能看到文档C.是否可以在SOLR中进行,而无需按元数据过滤?如果我使用元数据过滤器,每次都有访问权限更改,我必须重新索引.

[更新2/14/2012]不幸的是,在客户端的情况下,更改频繁.数据是保密的,通常仅由内部用户的所有者管理.然后,具体情况是他们需要能够将这些文档共享给某些外部用户并指定这些用户的访问级别.大多数情况下,这是一项临时任务,而且没有提前确定

Jes*_*ose 9

我建议将访问角色(是的,它的复数)存储为文档元数据.这里所需的字段access_roles是一个可分面的多值字符串字段.

Doc1: access_roles:[user_jane, manager_vienna] // Jane and the Vienna branch manager may see it
Doc2: access_roles:[user_john, manager_vienna, special_team] // Jane, the Vienna branch manager and a member of special team may see it
Run Code Online (Sandbox Code Playgroud)

拥有该文档的用户是该文档的默认访问角色.

要更改文档的访问角色,请进行编辑access_roles.


当Jane搜索时,她所属的访问角色将成为查询的一部分.Solr将仅检索与用户的访问角色匹配的文档.

user_jane维也纳办公室经理Jane()manager_vienna搜索时,她的搜索结果如下:

q=mainquery
&fq=access_roles:user_jane
&fq=access_roles:manager_vienna
&facet=on
&facet.field=access_roles
Run Code Online (Sandbox Code Playgroud)

其中获取其中包含的所有文件user_jane manager_viennaaccess_roles; Doc1Doc2.

当鲍勃,(user_bob),一个特殊团队(specia_team)的成员搜索,

q=mainquery
&fq=access_roles:user_bob
&fq=access_roles:special_team
&facet=on
&facet.field=access_roles
Run Code Online (Sandbox Code Playgroud)

这取代Doc2了他.

查询改编自http://wiki.apache.org/solr/SimpleFacetParameters#Multi-Select_Faceting_and_LocalParams

  • 此解决方案不可扩展。想象一下,您有数十万个文档和用户,并且经常更改。运行您建议的解决方案变得非常困难。 (2认同)