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