太阳黑子索尔 - 与小平面一起工作

Ham*_*ish 1 ruby-on-rails sunspot sunspot-rails

我使用太阳黑子,SOLR设置了分面搜索.像这样:

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

我的问题是,当我在控制器中执行分面搜索时,如下所示:

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

现在,基于with(:facet_id,params [:facet_id])条件计算构面计数.我希望在没有这个条件的情况下计算小平面计数.

我需要执行两次搜索吗?一个用于没有条件的搜索(用于计算构面计数)和一个用于检索结果的条件.或者有一种方法可以在一个SOLR查询中执行此操作.

谢谢

哈米什

out*_*ime 8

Solr(和Sunspot支持)一个名为"multiselect facets"的概念,这就是你需要的.基本上,您可以告诉Solr仅为了计算某个方面而忽略条件(或多个条件).所以你想要做的是:

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

希望有所帮助.