2017-01-09 7 views
0

List<Person>からNESTライブラリ経由でelasticsearchに多くのエントリを入れる必要があります。 私がループして、以下のコード使用して一つ一つを置くことができます。How to index <Person>をelasticsearch NESTにリストアップするC#

var person = new Person 
{ 
    Id = "1", 
    Firstname = "Martijn", 
    Lastname = "Laarman" 
}; 

var index = client.Index(person); 

をしかし、それは本当に遅い作品のように思えます。 NESTを使用してより迅速に対応する方法はありますか?

答えて

3

BulkDescriptorオブジェクトを見てください。

その後、あなたは次のように何かを行うことができます:

private readonly ElasticClient _client; //needs to be initialized in your code 
public void Index(IEnumerable<Person> documents) 
    { 
     var bulkIndexer = new BulkDescriptor(); 

     foreach (var document in documents) 
     { 
      bulkIndexer.Index<Person>(i => i 
       .Document(document) 
       .Id(document.SearchDocumentId) 
       .Index(_indexName)); 
     } 

     _client.Bulk(bulkIndexer); 
    } 

機能Indexは、あなたのタイプのIEnumerableを取ります。したがって、アイテムをインデックスにループして、各オブジェクトを個別にインデックスに追加するのではなく、この関数を使用してコレクションを渡すと、オブジェクトがバルクインデックスされます。

+1

ありがとうございます。 100倍以上のループでより速く動作します。ループでは、入力144kのエンティティに対して、その1時間以上を費やしました。バルク入力を使用することで、私は81秒を費やしました。 – neustart47

+1

私は助けてくれるとうれしいです:-) –