我在一个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只显示符合条件的结果?
发布于 2019-01-16 00:32:49
我也面临着同样的问题。最后,必须添加相关字段,并将过滤逻辑包含到Searchkick查询中。
然而,这真的很好。因为它超级快,只需使用弹性搜索进行搜索即可。否则,当数据变得很大时,在两个服务器上运行两个查询是不必要的开销。
在我的第一个解决方案中,我手动提取了过滤后的id,并将其传递给elasticsearch where子句,我们遇到了很多问题。
https://stackoverflow.com/questions/28911364
复制相似问题