SunSpot Geo通过关联搜索

时间:2011-05-20 06:22:10

标签: ruby-on-rails solr geolocation sunspot

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类中,那么实现此目的的最佳方法是什么?

1 个答案:

答案 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处理非规范化的一种非常常见的模式。