使用Thinking Sphinx定义关联模型的索引

时间:2011-02-14 15:28:06

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

使用以下配置在关联模型上定义索引的正确方法是什么?

我的模型Locality包含latlng属性以及相关模型ProfileUser

class User < ActiveRecord::Base
  has_one :user_profile

  define_index do
    # This doesn't work :(
    has "RADIANS(user_profiles.localities.lat)", :as => :lat, :type => :float
    has "RADIANS(user_profiles.localities.lng)", :as => :lng, :type => :float
  end
end

end

class UserProfile < ActiveRecord::Base
  belongs_to :user
  belongs_to :locality
end

class Locality < ActiveRecord::Base
  has_many :user_profiles
end

我需要为User模型定义索引,以便我可以对它进行地理搜索。

感谢您的回答!

2 个答案:

答案 0 :(得分:10)

问题是双重的:

  • 思考Sphinx不知道你想加入user_profile和locality association。
  • SQL片段应该只是 - 标准SQL - 所以你不能在其中链接关联。

以下应该可以解决问题:

define_index do
  # force the join on the associations
  join user_profile.locality

  # normal SQL:
  has "RADIANS(localities.lat)", :as => :lat, :type => :float
  has "RADIANS(localities.lng)", :as => :lng, :type => :float
end

Claudio在SQL中使用单一引用的观点是不正确的 - 在SQL中,您需要表名。但是你确实想要在连接调用中使用正确的关联引用(因此它们在那里是单数的)。

干杯

答案 1 :(得分:1)

真的不知道确切的解决方案,但是:

你有一个错字:

has_one :user_profile

define_index do
    # This doesn't work :(
    has "RADIANS(user_profiles.localities.lat)", :as => :lat, :type => :float

您对该属性使用“user_profiles”,它不应该是复数,请尝试将其更改为:“user_profile”。

我再说一遍,我不知道你是否可以浏览这个案件的协会,但如果可以的话,这应该是一个错字。

您可以在此处阅读以获取更多信息:http://freelancing-god.github.com/ts/en/geosearching.html