3

我在 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 只显示符合条件的结果?

4

1 回答 1

0

我遇到了同样的问题。最后,必须添加相关字段并将过滤逻辑包含到 Searchkick 查询中。

但是,这真的很好。因为它非常快,只需使用弹性搜索进行搜索。否则,当数据变大时,在两台服务器上运行两个查询是不必要的开销。

在我的第一个解决方案中,我手动提取过滤后的 id 并将其传递给 elasticsearch where 子句,我们遇到了很多问题。

于 2019-01-15T16:32:48.890 回答