我的问题在这里非常具体。我收集了太阳黑子查询的结果,
@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,我假设必须有一种更简单的方法。
感谢您的帮助!
答案 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)