1

我已经使用 Sunspot、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

现在基于 with(:facet_id, params[:facet_id]) 条件计算构面计数。我希望在没有这种条件的情况下始终计算刻面计数。

我需要执行两次搜索吗?一种用于没有条件的搜索(用于计算构面计数),另一种用于检索结果的条件。或者有没有办法在一个 SOLR 查询中做到这一点。

谢谢

哈米什

4

1 回答 1

8

Solr 有(并且 Sunspot 支持)一个称为“多选方面”的概念,这正是您在这里所需要的。本质上,您可以告诉 Solr 忽略一个条件(或多个条件),只是为了计算某个方面。所以你想要在这里做的是:

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

希望有帮助。

于 2011-06-16T14:22:50.093 回答