【问题标题】:how to get all docs with acts_as_solr如何使用acts_as_solr 获取所有文档
【发布时间】:2009-08-22 07:53:26
【问题描述】:

我正在做这样的事情:

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=>80} 和 :limit=>:all 但它仍然显示这 10 个。知道我缺少什么吗?

【问题讨论】:

    标签: ruby-on-rails ruby lucene solr


    【解决方案1】:

    来自Solr FAQ

    我怎样才能得到所有的匹配 文件返回? ... 我怎样才能返回 行数不限?

    这是 在大多数情况下是不切实际的。人们 通常只想在 他们知道他们正在处理一个 大小保证结果的索引 集合总是足够小 它们可以被传播 在可管理的数量 - 但如果 就是这样,只需指定你的 将“可管理的数量”视为您的 行参数并充分利用两者 世界(当你的所有结果 假设是正确的,并且理智上限 如果结果是结果大小 你的假设是错误的)

    至于用acts_as_solr 指定限制,试试:limit =&gt; 80 之类的东西

    【讨论】:

    • 您阅读我的问题了吗?我说我已经尝试过 :limit 和 :per_page 了,但是没有用。
    • 是的,我做到了。你提到了 :per_page=>80 和 :limit=>:all 但没有提到 :limit => 为什么我要假设你尝试过呢?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        您必须在查询中指定 :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)

        【讨论】:

          猜你喜欢
          • 2014-04-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-14
          • 1970-01-01
          • 2021-06-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多