使用 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
这是我的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