Searchkick получить все результаты при использовании нумерации страниц
У меня есть следующий поисковый запрос для продуктов с использованием searchkick:
def index
@filter = params[:filter].blank? ? nil : Search.find(params[:filter])
if @filter.present?
@products = @filter.products(set_order_column(@sort), @direction, params[:page], @per_page)
else
query = @query.presence || "*"
@products = Product.search(
query,
where: {
active: true
},
page: params[:page],
per_page: @per_page,
order: [{
"#{set_order_column(@sort)}" => "#{@direction}"
}],
misspellings: { distance: 2 },
fields: fields)
end
@filter_product_ids = @products.map(&:id)
end
Существует переменная filter_product_ids, где мне нужно хранить все результаты, а не отфильтрованные результаты по @per_page. Возможно ли это сделать? Прямо сейчас есть результаты только для результатов @per_page.
Цель получить все результаты без разбивки на страницы - получить уникальные значения для всех продуктов, которые используются для классификации различных продуктов для фильтрации на веб-сайте.
Спасибо за любые подсказки, Мирослав
2 ответа
Мое решение состоит в том, чтобы поместить это в свой собственный класс (класс обслуживания), а затем
class ProductFilter
attr_reader :search_params, :search_query, :pagination_params
def initialize(search_params, search_query, pagination_params)
@search_params = search_params
@search_query = search_query
@pagination_params = pagination_params
end
# Will return all records from searchkick, unpaginated
def filtered_products
Product.search(search_query, search_param_stuff)
end
# Will return all filtered_products & then paginate on that object
def paginated_products
filtered_products.records.paginate(pagination_params)
end
private
def search_param_stuff
search_params
end
end
В любом случае, метод поискового поиска для разбиения на страницы фактически работает с объектом записей поискового ключа, так что вы можете просто получить запрос ES (без передачи параметров пагинации) в одном методе, а затем разбить на страницы filtered_products.records
,
Просто удали
params[:page], @per_page
а также
page: params[:page],
per_page: @per_page,
из вашего кода