2014-06-19 157 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" 

當然這時的權限更改,指數必須儘快更新以反映此。