Sunspot с несколькими моделями (в Rails)

У меня есть три модели (User, Tag, Product), и они взаимодействуют s.t. User имеет много Tags и Products.

В целях поиска я хотел бы иметь возможность искать (с одной панелью поиска) имена пользователей, имена тегов и описания продуктов. Я также хотел бы искать на страницах продуктов, но это относится только к названиям тегов и описаниям продуктов.

Вот два примера:

Поиск: "Линус Торвальдс" возвращает все экземпляры Линуса Торвальдса в трех моделях, причем все экземпляры имени пользователя размещаются выше.

Поиск: "Linux" с возрастом: "20-25" возвращает все экземпляры пользователей с продуктами, которые включают "Linux" в их имя/описание и попадают в этот возрастной диапазон, а также пользователи с тегами, которые включают "Linux" и у которых есть продукты, которые попадают в этот возрастный диапазон. Обратите внимание, что если поиск не включал возраст, тогда он по умолчанию будет использовать все, кто соответствует части "Linux" , а не никому.

Мой вопрос в том, что было бы лучшим способом сделать это? Должен ли я создать модель поиска с собственным контроллером? Должен ли я просто игнорировать это и включать частичный поиск в общую папку? Какие существуют другие методы?

Большое спасибо.

Ответы

Ответ 1

Мне нравится идея объекта поиска, если вы выполняете сложные условия.

Но для поиска объектов с помощью Sunspot:

@sunspot_search = Sunspot.search User, Tag, Product do |query| 
  query.keywords @search_query
  query.with(:age).greater_than 20
  query.with(:age).less_than 25
  query.paginate(:page => params[:page], :per_page => 30)
end