[英]Index a large collection of MongoDB with Elasticsearch
我在MongoDB中有一个大集合(约2500万个),我想用ElasticSearch索引其中的所有文档。
在我的带有猫鼬代码的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)
如果您要索引大量数据,则Bulk API
绝对是更快,更高效的方法。
但是,您将能够成功处理的数据量还取决于客户端的配置。 您绝对不会希望保留大量客户端资源。
为什么不批量说10k个文档,则调用.bulk
函数。
Mongoosastic: https : //github.com/mongoosastic/mongoosastic/blob/master/README.md
Mongoosastic是一个猫鼬插件,可以自动将您的模型索引到elasticsearch中。 该软件包的最新版本将与最新的elasticsearch和mongoose软件包尽可能接近。
npm install -S mongoosastic
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.