【问题标题】:Rails - Filtering Searchkick Results using a model methodRails - 使用模型方法过滤 Searchkick 结果
【发布时间】:2015-03-07 04:27:21
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails elasticsearch searchkick


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多