Определение индексов для связанных моделей с Thinking Sphinx - PullRequest
3 голосов
/ 14 февраля 2011

Как правильно определить индексы в связанных моделях со следующей конфигурацией?

У меня есть модель Locality с атрибутами lat и lng и связанные модели Profile и User

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 ]

10 голосов
/ 15 февраля 2011

Проблема двоякая:

  • Мышление Сфинкс не знает, что вы хотите присоединиться к ассоциации user_profile и локальности.
  • Фрагменты 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

Смысл Клаудио в использовании единичных ссылок в SQL неверен - в SQL вам нужны имена таблиц. Но вы хотите, чтобы в соединении были правильные ссылки на ассоциации (следовательно, они там единственные).

Приветствия

1 голос
/ 14 февраля 2011

Не знаю, точное решение, но:

У вас есть опечатка:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...