新手问题 Solr 大数据量的分页问题

chancedoor · 2013年05月13日 · 最后由 Rei 回复于 2013年05月13日 · 4890 次阅读

我要解决分页的问题 也就是只显示前 100 页 举例来说

names = ["Bozhidar", "Steve", "Sarah"]
names.each do |n|
   puts n 
end

如何只输出前两个名字?

以上属于傻缺模式 解决方法还在找

names.first(2).each do |n|
  puts n
end

#1 楼 @Rei 真快!thanks!

分页应该是这个更合适吧?

limit = 40

[  ].each_slice(limit).each do |i|
  ap i
end

还有个方法就是 break

names.each_with_index do |n, i|
  puts n
  break if i == 2
end
names[0,n].each do |x|
  puts x
end

#3 楼 @mimosa 额 貌似我的情况还不太好解决。。。让我整理整理 看看怎么说比较清楚 #4 楼 @luikore #1 楼 @Rei

恩 是这样滴

#controller
   @search = User.solr_search do
      #一大波代码
      paginate :page => param[:page], :per_page => 10
    end
    @re = @search.results

#views
<table>
  <% @re.each do |r| %>
  <tr>
    <td><%= r.name %></td>
  </tr>
<% end %>
</table>
<%= "总数:#{number_with_delimiter(@search.total)}"%>
<%= paginate @re %>

如果改成@re = @search.results.first(1000)会报错 undefined method ‘current_page' for #<Array@search.results本身也是 Array 啊。。。 现在的结论是因为分页数据在之前就完成了 所以后来截取一段造成错误...什么的 想来想去觉得好像只有在paginate :page => param[:page], :per_page => 10这句设定一个上限 才能解决

看顶楼我就奇怪了,数组取前两个跟分页没啥关系。

这个问题是要把 solr 返回的数组拼装成分页插件能理解的集合对象。

#7 楼 @Rei -_-、我太天真了

#8 楼 @ChanceDoor 首先查询过程是交给搜索引擎插件执行的,ActiveRecord 的分页插件的 :page :per_page 参数只能转换为数据库查询,所以要自己转换 :limit,:offset 这些参数输入给搜索引擎的查询。

然后搜索引擎查询会返回一个结果集,包含结果数组,和 limt、offset、total_count 之类的信息,用这些信息组装一个分页插件能理解的结果集对象。具体要看分页插件的文档或者源码。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号