使用Elasticsearch索引大量MongoDB

时间:2016-03-18 19:09:31

标签: node.js elasticsearch mongoose

我在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)

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