我正在使用rsolr gem将solr搜索与我的RoR应用程序集成。现在,对于每次搜索,我需要指定rows
参数,这是我想要检索的结果数。为了检索与查询相对应的所有结果,我将rows参数设置为高值,如in this post所述。
但这样做会使处理真的很慢,而且我在rails日志中遇到以下错误:
[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/ruby-1.9.2-p320@voylla/gems/activesupport-3.1.10/lib/active_support/core_ext/time/calculations.rb:266:in `-'
/home/nish/.rvm/gems/ruby-1.9.2-p320@voylla/gems/activesupport-3.1.10/lib/active_support/core_ext/time/calculations.rb:266:in `minus_with_duration'
/home/nish/.rvm/gems/ruby-1.9.2-p320@voylla/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 :(得分:0)
来自Solr FAQ:
在大多数情况下这是不切实际的。人们通常只想做 当他们知道他们正在处理一个大小的索引时 保证结果集总是足够小 可行地以可管理的数量传输 - 但如果是这样的话 这种情况只是指定你认为“可管理的金额”作为你的 行param并获得两全其美(所有结果都是你的 假设是正确的,如果转变,则对结果大小设置一个理智上限 你的假设是错误的)
答案 1 :(得分:0)
您的错误与RoR有关,而不是Solr。它告诉你问题 - 请求的URI太大了。 WEBrick不是生产级别的Web服务器,v1.9.3似乎将http请求长度限制为2083(每个other SO question。)
短期解决方案?使用不会将请求的URI长度限制为非常短的Web服务器。
然而,这只是修复的一部分 - 您参与的过程将在执行时间方面相对于结果数量呈线性或更差的方式。结果数量不仅会影响性能,还会影响要检索的文档的大小。
您是否可以分享导致实施的要求,其中每个查询都会返回所有结果?