2016-03-18 15 views
0

MongoDBには大きなコレクション(〜25M)があり、その中のすべてのドキュメントをElasticSearchで索引付けしたいと考えています。マングースのコードで私のNodeJSでElasticsearchを使用したMongoDBの大規模なコレクションの索引

は、私は次のことをやっている:私はそれが個別に各ドキュメントのインデックスを作成するよりも優れていると思うので

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

Bulk APIは、膨大な量のデータを索引付けする場合、より高速で効率的な方法です。

ただし、正常に処理できるデータ量は、クライアントの構成によっても異なります。間違いなく、大量のクライアントリソースを保持したくはありません。

.bulkを10k文書のバッチで機能させてみませんか?

+0

ありがとうございます!私はこれが私の選択だと思う。しかし、ESの大きなコレクションのインデックスを作成する唯一の方法はありますか?私は川の運転手のような他の選択肢、またはスフィンクスやソルよりも似たような方法は驚いています。 –

0

Mongoosastic:https://github.com/mongoosastic/mongoosastic/blob/master/README.md

Mongoosasticはそのelasticsearchに自動的にインデックスあなたのモデルをすることができますマングースプラグインです。 このパッケージの最新バージョンは、最新のelasticsearchおよびmongooseパッケージに可能な限り近づきます。

npmインストール-S mongoosastic

関連する問題