我正在使用 searchkick 来包装 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
}
当我运行重建索引任务时:
Program.reindex(refresh: true)
我在日志中看到对 Provider 和 Schedule 进行了许多 SQL 查询,每个程序一个。 有没有办法告诉 Searchkick “
includes
”或“preload
”以某种方式优化重新索引?
您可以使用他们的文档提到您可以在数据库级别缓存这些值
希望在 searchkick 急切加载方法中可用,我们可以在 search_import 方法的帮助下使用包含。
您可以参考更多有关 searchkick 文档的信息这里。
从上面的示例数据中,我看到您的节目表与提供商、类别等有一个关联。在此帮助下,我尝试在下面提供示例示例,希望对您有所帮助。
在模型内部,您需要写为
scope :search_import, -> { includes(:provider, :category, :current_published_schedules) }
现在,当您点击重新索引时,它首先会立即加载您在搜索导入中提到的所有关联数据。现在,它连续触发每个程序数据的单个查询以在弹性中更新。
希望这有助于解决您的问题:)