Я пытаюсь заставить гео-поиск работать через ассоциацию. Очень похоже на этого парня:
Как выполнить гео-поиск в нескольких моделях с ThinkingSphinx?
Единственное отличие состоит в том, что я пытаюсь объединить синтаксис ассоциации с пользовательским синтаксисом SQL. Он не печатает никаких ошибок при индексации, но когда я пытаюсь выполнить поиск, происходит сбой:
class Person
define_index do
indexes tags(:text), :as => :tags
has media.location.lat('RADIANS(location.lat)'), :as => :lat, :type => :float
has media.location.lng('RADIANS(location.lng)'), :as => :lng, :type => :float
end
sphinx_scope(:by_location) { |loc|
{ :geo => [loc.lat.to_radians, loc.lng.to_radians],
:with => {"@geodist" => 0.0..loc.radius },
:latitude_attr => "lat",
:longitude_attr => "lng"
}
}
end
#running this search from console
Person.by_location(Location.first)
Это ошибка:
ThinkingSphinx :: SphinxError: индекс выполнения_кор: неизвестный атрибут широты 'широта *
Я пытался настроить его без строки SQL - это работает без ошибок, но математика, конечно, совершенно неверна, поскольку она пытается выполнять операции с радианами в градусах.
Есть ли способ объединить преобразование и ассоциацию, или я застрял, храня свои данные в радианах, а не в градусах?