2017-01-09 2 views
0

Мне нужно поместить много записей от List<Person> в elasticsearch через библиотеку NEST. я могу поставить один за другим, используя цикл и код ниже:Как индексировать Список <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 объектов. Используя массовый ввод, я потратил 81 секунду. – neustart47

+1

Рад, что я мог бы помочь :-) –

Смежные вопросы