我正在为 Rails 使用 Elasticsearch 库,耐嚼。我正在尝试找出一种有效批量导入约 200 万条记录的方法。这些是 Elasticsearch 文档,它们是我拥有的几个不同数据库模型的非规范化版本。
我将工作分成大小为 1000 的批次,并使用 Sidekiq 将它们卸载到工作队列。问题是什么时候导入!正在调用有一堆额外的数据库查询来解析字段,我不知道如何摆脱它们。
我做的天真的方法是ModelIndex::Type.import [<list of ids>]
。这显然会从数据库中查找每个文档,然后对其进行序列化/反序列化。这显然效率低下,所以我尝试这样做
ModelIndex::Type.import Type.includes(:secondary_field, :other_field).all
尝试使用急切加载来发挥我的优势,并使用连接进行一次数据库查询而不是 1000 次。唉,它仍然像以前一样查找数据库中的每个对象。
也许我遗漏了一些东西,但我想在索引时避免尽可能多的数据库查询以减少时间,任何帮助将不胜感激!