2011-06-15 167 views
1

我已經使用太陽黑子,SOLR設置分面搜索。就像這樣:太陽黑子Solr - 使用刻面

for row in @search.facet(:facet_id).rows 
    link_to row.instance.name, :url_for(:search => params[:q], :facet_id => row.value) 

我的問題是,當我執行控制器這樣的面搜索:

@search = Sunspot.search(MyModel) do 
     keywords search_text 
     facet :facet_id 
     with(:facet_id, params[:facet_id]) if params[:facet_id].present? 
    end 

的面數是基於與(現計算:facet_id,則params [: facet_id])條件。我希望總是能夠在沒有這種情況下計算方面數。

我需要執行兩次搜索嗎?一個用於沒有條件的搜索(計算方面計數)和一個用於檢索結果的條件。或者有一種方法可以在一個SOLR查詢中執行此操作。

感謝

哈米什

回答

8

Solr的有(和太陽黑子支持)一個名爲「多選面」的概念,這是什麼您這裏需要。基本上,你可以告訴Solr忽略一個條件(或多個條件),僅僅是爲了計算某個方面。所以你想要做的是:

Sunspot.search(MyModel) do 
    facet_restriction = with(:facet_id, params[:facet_id]) 
    facet(:facet_id, :exclude => facet_restriction) 
end 

希望有所幫助。

+0

非常感謝你! – Hamish 2011-06-16 23:14:44

+0

有沒有一種簡單的方法來創建'全部'方面?因爲@ search.total不會從計算中排除方面。謝謝 – Hamish 2011-06-17 00:31:15

+0

有一個「全部」方面的功能,但太陽黑子使用Solr查詢方面的方法來計算它,並且(在我的實驗中)查詢方面無法正常使用多選,即使文檔說他們應該。不過,這可能會在Solr 3.1中得到修復,所以如果你的目標是3.1,那就給它一個鏡頭(這是'太陽黑子'的'facet'方法的':extra'選項)。 – outoftime 2011-06-17 13:04:34