如何在Sunspot Solr中使用will_paginate

时间:2014-11-21 15:39:10

标签: solr will-paginate sunspot-rails

我的问题在这里非常具体。我收集了太阳黑子查询的结果,

  @search = Product.search do
    with(:website_id, id)
    with(:archived_at, nil)
    with(:category_id, restrictive_category_ids)
    fulltext search_string do
      phrase_fields(:name => 1, :artist => 3, :tag_list => 2)
      minimum_match 0 #enables search to be performed by each word, not the whole phrase.
    end
    paginate :page => 1, :per_page => 2
  end

  @products = @search.results

这会产生几页结果,每页2页。所有这些都在Sunspot的控制台中得到验证。

我的问题是尝试将will_paginate与结果一起使用。例如,在视图中:

<%= will_paginate @products, param_name: 'products', class: 'pagination-nav' %>

由于@products仅在初始查询中返回2个结果,因此will_paginate认为只有2个结果,因此甚至不会出现。如果我用Product.all替换@products,它显然会出现并显示结果页面。

所以我不知道我需要做什么来告诉will_paginate确实有多少结果,所以它知道要显示多少页面。当然,我可以对所有这些记录单独进行查询,但这会对应用程序产生重大影响,并且鉴于Sunspot声称可以使用will_paginate,我假设必须有一种更简单的方法。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

我找到了答案。

我不需要在视图中的“will_paginate”方法中使用@ search.results,而是需要使用@ search.hits。

使用“点击”是关键。 “results”仅返回model.search方法中分页方面的结果数量。另一方面,“命中”提供了一系列记录,反映了整个搜索的数量,因此允许分页结果正常工作。

答案 1 :(得分:-1)

从solr获取结果然后按solr搜索你的模型,solr返回并对它们进行分页,如下所示:

@search = Sunspot.search(Snippet) do
   fulltext params[:search]
end
@styles = Product.where(id: @search.hits.map(&:primary_key)).paginate(page: params[:page], per_page: 3)