如何使用acts_as_solr获取所有文档

我正在做这样的事情:

Item.find_by_solr('name:ab*') 

它说它返回297结果:

 => #[doc1, doc2, doc3...]}, :max_score=>1.6935261, :total_pages=>1, :total=>297}, @current_page=1> Item.count_by_solr('name:ab*') also returns 297. 

然而,当迭代时它只显示10个项目:

 Item.find_by_solr('reference_name:ab*').each do |i| puts i end 

我尝试添加{:per_page => 80}和:limit =>:all但它仍然显示那些10.我知道我缺少什么吗?

来自Solr FAQ :

如何获取所有匹配的文件?如何返回无限数量的行?

在大多数情况下这是不切实际的。 人们通常只想知道他们正在处理一个索引时才会这样做,索引的大小保证结果集总是足够小,以便可以以可管理的数量传输 – 但如果是这样的话,只需指定你考虑的内容一个“可管理的数量”作为你的行参数并获得两全其美(当你的假设正确时所有结果,如果结果你的假设是错误的,结果大小的理智上限)

至于使用acts_as_solr指定限制,请尝试类似:limit => 80

正如@mausch所说,Solr(以及扩展名为acts_as_solr )默认为10个结果。 您可以使用:limit选项来增加此值,但它只需要一个Fixnum,而不是:all符号。 所以使用Fixnum指定:limit。

我在粗略的笔记中说你可以修改parser_methods.rb,在l左右。 75只返回AR ID,而不是对象本身。 值得在大型数据集中尝试。

您必须在查询中指定:offset参数。

所以要查看项目的下10个条目(第11到第20个),你必须这样做,

 Item.find_by_solr('name:ab *',:offset => 10)

要查看接下来的10个条目,您必须再次将:offset参数增加10.因此接下来的10个条目看起来像这样。

 Item.find_by_solr('name:ab *',:offset => 20)

提取了10个条目,因为:limit参数的默认值是10.如果我们想一次获取10个以上的条目,我们可以将其更改为其他条目。

 #此查询获取30个项目,偏移30个。(假设此查询找到超过30个条目)
 Item.find_by_solr('name:ab *',:limit => 30,:offset => 30)