我在Rails电子商务项目中使用Searchkick。用户可以搜索产品列表。
我有一些条件可以在网站上显示某些产品(例如,如果库存= 0等)。
根据searchkick文档,我在控制器中将搜索方法设为@listings = Listing.search(params[:search])
。这可以按预期工作。
在我的列表模型中,我有以下方法来定义哪些列表可以显示。
class Listing < ActiveRecord::Base
scope :listable, -> {
joins("INNER JOIN users
ON users.id = listings.user_id
AND users.hidelistings = 'f'") }
def self.not_expired
listable.where('(listings.updated_at >= ? or user_id = ?) and inventory > ?', Date.current - 30.day, 24, 0)
end
基于以上所述,我希望我的searchkick方法能说@listings = Listing.not_expired.search(params[:search])
,但这不起作用。如何告诉searchkick仅显示符合条件的结果?
答案 0 :(得分:0)
我遇到了同样的问题。最后,必须添加相关字段并将该过滤逻辑包括到Searchkick查询中。
但是,那真的很好。因为它超快,只需使用弹性搜索即可搜索。否则,当数据变大时,在两个服务器上运行两个查询是不必要的开销。
在第一个解决方案中,我手动选择了经过过滤的id,并将其传递给elasticsearch where子句,我们遇到了很多问题。