使用 SearchKick / ElasticSearch 建立索引时如何急切加载相关模型?

How to eager load related models when indexing using SearchKick / ElasticSearch?

这是我的search_data方法:

def search_data
  {
    email: email,
    skills: interests.pluck(:name)
  }
end

我的 User has_many :skills。当我 运行 User.where(conditions).reindex 它加载 skills 记录如

SELECT * FROM skills WHERE skills.user_id = 1
SELECT * FROM skills WHERE skills.user_id = 2
SELECT * FROM skills WHERE skills.user_id = 3
SELECT * FROM skills WHERE skills.user_id = 4
. . .

我想知道是否可以像这样加载它:

SELECT * FROM skills WHERE skills.user_id IN (1, 2, 3, 4, . . .)

您可以在索引时使用预先加载,因此要重新索引您的 User 模型,您可以编写类似 User.includes(:skills).reindex

的内容

那么你也需要在这里使用 map 而不是 pluck:

def search_data
  {
    email: email,
    skills: interests.map(&:name)
  }
end