【问题标题】:Sunspot Solr - working with facetsSunspot Solr - 使用方面
【发布时间】:2011-06-15 23:38:48
【问题描述】:

我已经使用 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 查询中做到这一点。

谢谢

哈米什

【问题讨论】:

    标签: ruby-on-rails sunspot sunspot-rails


    【解决方案1】:

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

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

    希望对您有所帮助。

    【讨论】:

    • 有没有一种简单的方法来拥有“所有”方面?因为@search.total 不会从其计算中排除构面。谢谢
    • 有一个“所有”方面的能力,但是 Sunspot 在后台使用 Solr 查询方面来计算它,并且(在我的实验中)查询方面不能与多选一起正常工作,即使文档说他们应该这样做。不过,这可能在 Solr 3.1 中得到修复,所以如果您的目标是 3.1,请试一试(这是 Sunspot 的 facet 方法的 :extra 选项)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多