如何根据某些条件使用searchkick进行索引

mak*_*app 2 ruby-on-rails-4 searchkick

我正在使用 searchkick 和 rails4。

我有一个 activerecord People,属性为 a、b、c。仅当 b 等于“type1”时如何进行索引,否则不进行索引?

目前我所知道的是

def search_data
  {
    a:a,
    b:b,
    c:c,
  }
end
Run Code Online (Sandbox Code Playgroud)

小智 5

有点晚了,但今天早些时候一位队友提出了这个问题,我认为这个话题值得更详细的回答。

据我所知,您有两个选项可以控制 searchkick 索引哪些记录:

  1. 在类级别,您可以通过定义 ActiveRecord 范围来限制记录搜索索引search_import。这个范围本质上是在一次索引多个记录时使用,比如在运行searchkick:reindex任务时。

  2. 在实例级别,您可以定义一个should_index?方法,该方法在索引之前在每条记录上调用,它确定是否应从索引中添加或删除记录。

因此,如果您只想索引具有bequals 的记录,'type1'您可以执行以下操作:

class People < ApplicationRecord
  scope :search_import, -> { where(b: 'type1') }

  def should_index?
    b == 'type1'
  end
end
Run Code Online (Sandbox Code Playgroud)

请注意,返回falsefromshould_import?将从索引中删除记录,您可以在此处阅读。