[英]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.