Searchkick 在使用分页时获取所有结果
Searchkick get all results when using pagination
我有以下使用 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.
不分页获取所有结果的目的是为网站上用于各种产品分类的所有产品获取唯一值以进行过滤。
感谢您的任何提示,Miroslav
只需删除
params[:page], @per_page
和
page: params[:page],
per_page: @per_page,
来自您的代码。
我的解决方案是将它放在它自己的 class(服务 class)中,然后
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
无论如何,searchkick 的分页方法实际上适用于 searchkick 记录对象,因此您只需在一个方法中提取 ES 查询(不传递分页参数),然后在 filtered_products.records
上分页。
我有以下使用 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.
不分页获取所有结果的目的是为网站上用于各种产品分类的所有产品获取唯一值以进行过滤。
感谢您的任何提示,Miroslav
只需删除
params[:page], @per_page
和
page: params[:page],
per_page: @per_page,
来自您的代码。
我的解决方案是将它放在它自己的 class(服务 class)中,然后
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
无论如何,searchkick 的分页方法实际上适用于 searchkick 记录对象,因此您只需在一个方法中提取 ES 查询(不传递分页参数),然后在 filtered_products.records
上分页。