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

У меня три модели (User, Tag, Product) и они взаимодействуют 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
Другие вопросы по тегам