思维狮身人面像没有在生产中正确索引belongs_to关系,但在开发中工作正常

时间:2011-11-04 03:54:49

标签: ruby-on-rails-3 sphinx thinking-sphinx

我想显示与给定作者相关的电影。在作者的页面上,我希望用户能够按关键字进行分页,排序和过滤。

在我的本地计算机上一切正常。但是,在制作中,作者页面上的电影列表是空的,我无法弄清楚原因。在生产中,在控制台中,我测试了以下表达式,但没有运气(总是返回0,而它在dev中返回值> 0):

ruby-1.9.2-p290 :042 > Movie.search(:with => {:author_ids => [6]}).count
 => 0
 ruby-1.9.2-p290 :043 > Movie.search(:with => {:author_ids => 6}).count
 => 0 

奇怪的是,我使用非常相似的代码来显示与主题页面上的主题相关联的电影,并且它在开发和生产中非常有用。例如:

ruby-1.9.2-p290 :051 > Movie.search(:with => {:topic_ids => 2}, :per_page   => 1000).count
 => 295 

以下是我定义Movie类的方法:

class Movie < ActiveRecord::Base

  belongs_to :author
  has_many :topics
  ...

  define_index('movie') do
    ...
    has       author(:id),                :as         => :author_ids,
                                          :facet      => true

    has       topics(:id),                :as         => :topic_ids,
                                          :facet      => true

    ...
  end

  ...
end

以下是我的作者显示控制器的样子:

def show
    @author = Author.find(params[:id])
    keywords = params[:what] || ""
    with_params[:author_ids] = [@author.id]

    @movies = Movie.search(
            keywords,
        :with => with_params
    )

end

这让我相信生产中的Sphinx指数有问题,但我不确定如何进一步调查以找到问题的根源......

更新:按照Pat的建议,我更新了Sphinx,一切都解决了(我从0.9.8升级到0.9.10)!我很困惑,因为Sphinx不是宝石(即使存在Sphinx宝石)......所以我不得不经历常规下载,制作,安装过程。

1 个答案:

答案 0 :(得分:1)

我将从明显的开始,但也许这已经尝试过了 - author_ids属性是否相对较新?自从添加该属性后,您是否重建了(索引重新启动)Sphinx? rake ts:rebuild是一种简单的方法。

更新:事实证明更新Sphinx是这里的解决方案 - 亚历克斯可以确认哪个版本,但我猜测0.9.9或更高应该可以做到这一点。