【问题标题】:How to eager load related models when indexing using SearchKick / ElasticSearch?使用 SearchKick / ElasticSearch 进行索引时如何预先加载相关模型?
【发布时间】:2016-08-22 21:45:56
【问题描述】:

这是我的search_data 方法:

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

我的Userhas_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, . . .)

【问题讨论】:

  • 你是如何找到解决这个问题的?,这使得索引需要很长时间。

标签: ruby-on-rails-3 elasticsearch searchkick


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-02-18
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    相关资源
    最近更新 更多