elasticsearch,nest,C#,elasticsearch,Nest" /> elasticsearch,nest,C#,elasticsearch,Nest" />

C# 如何通过NEST c将列表索引到elasticsearch中

C# 如何通过NEST c将列表索引到elasticsearch中,c#,elasticsearch,nest,C#,elasticsearch,Nest,我需要通过NEST库将列表中的许多条目放入elasticsearch。 我可以使用下面的循环和代码逐个放置: var person = new Person { Id = "1", Firstname = "Martijn", Lastname = "Laarman" }; var index = client.Index(person); 但它似乎工作得很慢。有没有办法通过NEST更快地完成这项工作?看看BulkDescriptor对象 然后您可以执行以下操作: p

我需要通过NEST库将列表中的许多条目放入elasticsearch。 我可以使用下面的循环和代码逐个放置:

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

var index = client.Index(person);
但它似乎工作得很慢。有没有办法通过NEST更快地完成这项工作?

看看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);
    }
函数索引采用您类型的IEnumerable。因此,当您循环遍历要索引的项目时,不要单独将每个对象添加到索引中,而是使用此函数将集合传递给,它将为您批量索引对象。

请查看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);
    }

函数索引采用您类型的IEnumerable。因此,当您通过项目循环进行索引时,不要单独将每个对象添加到索引中,而是使用此函数将集合传递到,它将为您批量索引对象。

非常感谢。工作速度比循环快100倍以上。在循环中,我花了一个多小时来输入144k个实体。通过使用批量输入,我已经花了81秒。很高兴我能提供帮助:-非常感谢。工作速度比循环快100倍以上。在循环中,我花了一个多小时来输入144k个实体。通过使用批量输入,我已经花了81秒。很高兴我能提供帮助:-