如何使用 ElasticSearch rails 批量导入 1M 记录?

ale*_*our 6 import ruby-on-rails elasticsearch elasticsearch-bulk-api

我想从我的 MySQL 表运行批量导入到 ES - 对于我的模型 Wine - 在我的生产服务器中。有 1.5M 条记录。

我的模型 - ES gem 的代码:

include Elasticsearch::Model
include Elasticsearch::Model::Callbacks

def as_indexed_json(options={}) 
  as_json(only: [:id, :searchable]) 
end 

mapping do
  indexes :id, index: :not_analyzed
  indexes :searchable
end
Run Code Online (Sandbox Code Playgroud)

在开发中,我运行成功:

bundle exec rake environment elasticsearch:import:model CLASS='Wine' BATCH='100'
Run Code Online (Sandbox Code Playgroud)

但我只有 1000 条记录...

我可以在 prod 中运行类似的命令而没有问题吗?还有其他方法吗?

我注意到我需要使用上面的代码更新模型,否则它将无法工作。问题是如果用户想在批量导入之前更新对象并且在我的模型更改之后,将会出现 ES 问题 (DocumentNotFound) - 逻辑。如果尚未创建,是否可以使用回调来创建 ES 索引,而不是获得 ES 异常?

这样做的正确方法是什么?“elasticsearch:import:model”在后台工作吗?