我在MongoDB中有一个大型集合(~25M),我想用ElasticSearch索引其中的所有文档。
在我的带有mongoose代码的NodeJS中,我正在执行以下操作:
thebody = [];
Model
.find({})
.stream()
.on('data', function(doc){
thebody.push({index: {_index: index, _type: type, _id: doc._id}});
thebody.push(doc);
})
.on('close', function () {
client.bulk({
body: thebody
});
})
我使用bulk
函数,因为我认为它比单独索引每个文档更好。但是,这会导致内存问题(因为大数组thebody
)。
单独索引每个元素会更好吗?谁知道更好的解决方案? (我不能使用河流,因为我的ES版本是2.2)
答案 0 :(得分:0)
Bulk API
肯定更快,更有效。
但是,您将能够成功处理的数据量还取决于客户端的配置。你绝对不想要占用大量的客户资源。
为什么不批量调用{10}文件中的.bulk
功能。
答案 1 :(得分:0)
Mongoosastic:https://github.com/mongoosastic/mongoosastic/blob/master/README.md
Mongoosastic是一个猫鼬插件,可以自动将模型索引到elasticsearch中。 该软件包的最新版本将尽可能接近最新的elasticsearch和mongoose软件包。
npm install -S mongoosastic