如何使用acts_as_solr获取所有文档

时间:2009-08-22 07:53:26

标签: ruby-on-rails ruby lucene solr

我正在做这样的事情:

Item.find_by_solr('name:ab*')

它说它返回297结果:

=> #<ActsAsSolr::SearchResults:0xb6516858 @total_pages=1, @solr_data={:docs=>[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 =&gt; 80}和:limit =&gt;:所有但它仍然会显示那些10.我知道我缺少什么吗?

4 个答案:

答案 0 :(得分:1)

来自Solr FAQ

  

如何获得所有匹配   文件回来了? ... 我该怎么回事?   行数不限?

     

这是   在大多数情况下不切实际。人   通常只想做到这一点   他们知道他们正在处理一个问题   索引,其大小保证结果   集合总是足够小   他们可以切实传播   在可管理的数量 - 但如果   就是这种情况只是指明了你   考虑一个“可管理的金额”作为你的   行param并充分利用两者   世界(所有的结果当你的   假设是对的,理智上限   如果事实证明结果大小   你的假设是错误的)

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

之类的内容

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您必须在查询中指定: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个以上的条目,我们可以将其更改为其他条目。

# This query fetches 30 items, offset by 30. (assuming more than 30 entries are found by this query)
Item.find_by_solr('name:ab*', :limit => 30, :offset => 30)