2011-06-15 168 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