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