SunSpot Geosearching через ассоциацию - PullRequest
2 голосов
/ 20 мая 2011
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

При такой настройке, как я могу выполнить поиск с помощью SunSpot (в Solr) в Rails для пользователя в пределах заданного широты / долготы?Например, я хочу быть в состоянии сделать это:

  @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 Ответ

4 голосов
/ 20 мая 2011

Ассоциация 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.

...