class Office < ActiveRecord::Base
has_many :users
searchable do
text :name
location :coordinates do
Sunspot::Util::Coordinates.new(latitude, longitude)
end
end
end
class User < ActiveRecord::Base
belongs_to :office
searchable do
text :name, :default_boost => 2
text :description
end
end
通过这种设置,如何在给定纬度/经度的用户的Rails上使用SunSpot(在Solr上)进行搜索?例如,我希望能够这样做:
@search = User.search() do
fulltext(params[:q])
with(:coordinates).near(@lat, @long, :precision => 5)
end
以下工作正常:
@search = Office.search() do
fulltext(params[:q])
with(:coordinates).near(@lat, @long, :precision => 5)
end
如果每个用户的纬度/经度确实存在于Office类中,那么实现此目的的最佳方法是什么?
答案 0 :(得分:4)
office
关联应该在用户的可搜索块内。
鉴于此,这就是我要开始的(未经测试,脱离我的头脑等):
class User < ActiveRecord::Base
belongs_to :office
searchable do
text :name, :default_boost => 2
text :description
location :coordinates do
Sunspot::Util::Coordinates.new(office.latitude, office.longitude)
end
end
end
获取像这样的块中关联对象的值实际上是使用Sunspot处理非规范化的一种非常常见的模式。