我正在使用searchkick来 Package OpenSearch。我的Program
型号有这个search_data
:
{
name: name,
description: description,
provider_name: provider.name,
category: category&.name,
age_min: age_min || 0,
age_max: age_max || 999,
start_dates: current_published_schedules.pluck(:start_date),
zipcode: address&.zipcode,
program_type: program_type
}
当我运行reindex任务时:
Program.reindex(refresh: true)
我在日志中看到,已经对Provider和Schedule进行了许多SQL查询,每个Program一个。有没有办法告诉Searchkick“includes
“或“preload
“以某种方式优化重新索引?
2条答案
按热度按时间a2mppw5e1#
希望searchkick中的eager load方法可用,我们可以在 search_import 方法的帮助下使用includes。
你可以在这里参考更多关于searchkick的文档。
从上面的示例数据中,我看到您的程序表与供应商,类别等有一个关联。在此基础上,我尝试在下面给出给予示例,希望对你有所帮助。
程序模型
从模型内部,您需要编写为
现在当你点击重新索引时,它首先会加载你在搜索导入中提到的所有关联数据。现在,它连续地为每个程序数据触发单个查询以在弹性中更新。
希望这有助于解决您的问题:)
z31licg02#
你可以使用他们的文档提到你可以缓存这些值在数据库级别