Ruby on rails Ruby 1.9.3中的Sphinx问题?

Ruby on rails Ruby 1.9.3中的Sphinx问题?,ruby-on-rails,ruby,sphinx,thinking-sphinx,ruby-1.9.3,Ruby On Rails,Ruby,Sphinx,Thinking Sphinx,Ruby 1.9.3,我最近将一个web应用程序从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 }, :pa

我最近将一个web应用程序从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
在浏览器中运行时,我会得到[]:数组的
未定义方法总数\u项

违规行是
@count=@results.total\u条目

我已经确保sphinx已经安装,并且认为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,这对长期维护总是有帮助的(但可以理解的是,这并不总是可能的)

将total\u条目更改为count或length…我已经这样做了,可以解决“错误”。然而,我想知道为什么我的结果没有通过。如果我运行ids=Business.simple\u搜索带有位置('surf','atlantic beach','fl',{},:per\u page=>2500)的ids\u,我会在控制台中得到一个空数组。我知道有一些企业符合搜索条件。你使用的是哪个版本的Thinking Sphinx,你在1.8.7上使用的是哪个版本?另外,你可以分享你的商业模式的Sphinx索引定义吗?现在使用1.4.11是使用1.4和ruby 1.8.7。这里是索引:从这个要点来看,你使用的是Sphinx的最新版本。我不确定您使用的TS/Riddle版本是否支持这一点-您可能需要降级(我将从Sphinx的2.0.x版本开始,看看这是否有帮助?)。此外,您是否可以共享工作重建运行的输出?最后一点:现在是否发现了业务名称排序的一致性错误?
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