2014-01-11 69 views
0

我正在使用rsolr gem将Solr搜索与我的RoR应用程序集成。现在对于每个搜索,我需要指定rows参数,这是我想要检索的结果数量。为了检索对应于查询的所有结果,我将rows参数设置为一个较高的值,如in this post所述。Solr:如何获得对应于查询的所有结果

但这样做,使处理真的很慢,我收到以下错误的轨道日志:

[2014-01-11 15:51:08] ERROR WEBrick::HTTPStatus::RequestURITooLarge 
[2014-01-11 15:51:08] ERROR TypeError: can't convert nil into an exact number 
    /home/nish/.rvm/gems/[email protected]/gems/activesupport-3.1.10/lib/active_support/core_ext/time/calculations.rb:266:in `-' 
    /home/nish/.rvm/gems/[email protected]/gems/activesupport-3.1.10/lib/active_support/core_ext/time/calculations.rb:266:in `minus_with_duration' 
    /home/nish/.rvm/gems/[email protected]/gems/activesupport-3.1.10/lib/active_support/core_ext/time/calculations.rb:277:in `minus_with_coercion' 
    /home/nish/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/webrick/accesslog.rb:42:in `setup_params' 
    /home/nish/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/webrick/httpserver.rb:164:in `access_log' 
    /home/nish/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/webrick/httpserver.rb:87:in `run' 
    /home/nish/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread' 

我怎样才能解决这个问题?由于

回答

0

Solr FAQ

这是在大多数情况下是不切实际的。人们通常只想做 这是因为他们知道他们正在处理的索引的大小为 保证结果集总是会足够小,以至于他们可以将 以可管理的数量进行传输 - 但如果这就是 这种情况请指定您认为“可管理的金额”,因为您的行参数为 ,并获得两全其美(当您的假设为正确时,所有结果都为 ,如果结果大小为 ,则假设错误)

0

您的错误与RoR有关,而不是Solr。它告诉你这个问题 - 请求的URI太大。 WEBrick不是生产口径的Web服务器,并且v1.9.3似乎将http请求长度限制为2083(根据此other SO question。)

短期修复?使用不限制您请求的URI长度的网络服务器,使其短到如此短的时间。

但是,这只是修复程序的一部分 - 从执行时间和结果数量的角度来看,您参与的过程将以线性或更差的方式增长。结果数量不仅会影响性能,还会影响正在检索的文档的大小。

你可以分享你的需求,导致一个实现,每个查询返回所有结果吗?

相关问题