Ruby 1.9.3 的 Sphinx 问题?

Sphinx Issue with Ruby 1.9.3?

我最近将一个网络应用程序从 ruby 1.8.7 移到了 1.9.3,一切都很顺利,除了搜索。在碰撞 ruby 之前一切正常。这是我的控制器代码:

ids = Business.simple_search_for_ids_with_location(@term, @city, @state, {}, :per_page => 2500)
      @results = Business.paginate :conditions => { :id => ids }, :page => ActionController::Base.helpers.sanitize(params[:page]), :include => [:category]
      @results = @results.sort{|a,b| a.name.downcase <=> b.name.downcase}
      @count = @results.total_entries

从我的模型:

def self.simple_search_for_ids_with_location(term, city, state, conditions={}, options={})
  ids = Business.compact_search_for_ids(term, {:conditions => { :address_city => city, :address_state => state }.merge(conditions), :order => :business_name}.merge(options))
  if state.blank?
    by_state = Business.compact_search_for_ids(term, {:conditions => { :address_state => city }.merge(conditions), :order => :business_name}.merge(options))
    ids += by_state
  end
  ids
end

def self.compact_search_for_ids(*args)
  search_for_ids(*args).compact
end

当在浏览器中 运行 我得到 undefined method total_entries for []:Array

违规行是@count = @results.total_entries

我已确保 sphinx 已安装并且 thinking_sphinx 已编入索引并且 运行。

似乎一切正常,但返回的是空数组?为什么以前可以正常工作?

我很感激能在这里得到任何帮助,因为我真的不想回到 ruby 1.8.7。谢谢。

通过上面评论中的一些讨论找到了解决方案。一些想法可能会对遇到类似问题的其他人有所帮助:

  • 如果您使用的是 Thinking Sphinx v1.x 或 2.x,最好坚持使用旧的 Sphinx 版本。建议不要高于 Sphinx v2。0.x。
  • 确保在升级 Thinking Sphinx 时 运行 rake ts:rebuild,当然在升级 Sphinx 本身时(其索引格式通常在次要版本之间发生变化)。
  • 如果您能够升级到 Ruby/Rails/Thinking Sphinx 的更新版本,这总是有助于长期维护(但可以理解并非总是可行)。