Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 如何根据某些条件使用searchkick进行索引_Ruby On Rails 4_Searchkick - Fatal编程技术网

Ruby on rails 4 如何根据某些条件使用searchkick进行索引

Ruby on rails 4 如何根据某些条件使用searchkick进行索引,ruby-on-rails-4,searchkick,Ruby On Rails 4,Searchkick,我正在使用searchkick和rails4 我有一个activerecord人物,具有属性a、b、c。只有当b等于“type1”时,我如何才能建立索引,否则就不能建立索引 目前我知道的是 def search_data { a:a, b:b, c:c, } end 根据: 默认情况下,所有记录都编制了索引。要控制哪些记录被编入索引,请将should\u index?方法与search\u import范围一起使用 这应该适用于您的情况: class Peopl

我正在使用searchkick和rails4

我有一个activerecord人物,具有属性a、b、c。只有当b等于“type1”时,我如何才能建立索引,否则就不能建立索引

目前我知道的是

def search_data
  {
    a:a,
    b:b,
    c:c,
  }
end
根据:

默认情况下,所有记录都编制了索引。要控制哪些记录被编入索引,请将
should\u index?
方法与
search\u import
范围一起使用

这应该适用于您的情况:

class People < ApplicationRecord
  searchkick # you probably already have this
  scope :search_import, -> { where(b: "type1") }

  def should_index?
    self.search_import # only index records per your `search_import` scope above
  end

  def search_data # looks like you already have this, too
    {
      a:a,
      b:b,
      c:c,
    }
  end
end
class-People{where(b:“type1”)}
def应该索引吗?
self.search_import#仅为上述“search_import”范围内的记录编制索引
结束
def search#u data#看起来您也已经有了这个
{
a:a,
b:b,
c:c,
}
结束
结束

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

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

  • 在类级别,您可以通过定义ActiveRecord范围
    search\u import
    来限制记录searchkick索引。基本上,当一次索引多个记录时,如运行
    searchkick:reindex
    task时,使用此范围

  • 在实例级别,您可以定义一个
    should\u index?
    方法,该方法在索引之前对每个记录调用,它确定是否应在索引中添加或删除记录

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

    class-People{where(b:'type1')}
    def应该索引吗?
    b==“类型1”
    结束
    结束
    

    请注意,从
    应该导入?
    返回
    false
    将从索引中删除记录,正如您所能读取的那样。

    在应该索引中,应该是b而不是self。search\u import?不,不应该是
    b
    def should_index?
    仅对
    should_index?
    块内返回的记录进行索引。而且,
    self.search\u import?
    将调用
    search\u import
    作用域,它将只返回
    b==“type1”
    的记录,这意味着这些是将被索引的唯一记录。您不能跳过search\u import作用域声明,只将逻辑放在should\u index内吗?是的,从我在代码和中看到的情况来看,
    search\u import
    should\u index?
    在记录被索引之前都会被调用,因此您应该能够使用其中一个。