2011-05-20 60 views
2
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上)進行搜索?舉例來說,我希望能夠做到這一點:SunSpot通過關聯尋找地址

@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 

什麼是實現這一目標的最佳途徑鑑於經/緯每個用戶真正生活在辦公室課?

回答

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 

抓取值塊像這其實是一個很常見的模式用太陽黑子處理非規範化。