2014-06-19 111 views
1

我有我的Solr 4.3实例在Nutch爬行我的本地文件系统和Solr存储索引的Tomcat服务器上运行。Solr身份验证

当用户搜索时,我需要Solr根据用户类型过滤出某些文档。

说我有一个目录结构如下所示:

dir1 
    |------dir_userA----files 
    |------dir_userB----files 
    |------Public-------files 

所以我只想搜索从特定用户访问目录返回结果。

这可能吗?

回答

3

Solr没有文档级别的安全性,所以您将不得不为每个文档检索和索引访问控制列表。然后,您需要对每个搜索应用过滤器查询并传入用户的安全组和/或用户名。

比方说,你的文档被索引这样的,其中对于多值字段“访问”的值是在索引时间通过在文件中的实际权限决定:

<doc> 
    <field name="id">42</field> 
    <field name="name">Products.xlsx</field> 
    <field name="title">Product list</field> 
    <field name="content">...</field> 
    <field name="access">COMPANY\Marketing</field> 
    <field name="access">COMPANY\CustomerService</field> 
</doc> 

然后你可以装点查询请求在solrconfig.xml中默认的过滤器查询参数的处理程序:

<requestHandler name="/select" class="solr.SearchHandler"> 
    <defaults> 
     <str name="fq">access:"COMPANY\Everyone"</str> 
    </default> 
</requestHandler> 

默认情况下,现在搜索将不会返回Products.xlsx文件,因为这是模拟的默认的“用户”(即“COMPANT \每个人”)不不出现在“访问”字段中。但只要你一个真实用户群覆盖默认筛选器查询中传递,Solr的将返回文档:

/solr/collection1/select?q=content:"product x"&fq=access:"COMPANY\Marketing" 

当然这时的权限更改,指数必须尽快更新以反映此。