如何使用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)