ElasticSearch 批量索引
ElasticSearch Bulk Indexing
我将 2.1 版和 2.0(alpha)版客户端与 Nest C# 客户端一起使用...我试图批量插入一些记录,但是,服务器返回错误。我在与 Linux 服务器通信的 windows 客户端上使用客户端(不过我认为这无关紧要)。
public static void AddQuestionsToElasticSearch()
{
var es = new ElasticsearchClient(new ConnectionConfiguration(
new Uri("http://elasticserver:9200"))
);
var foobars = new FooBar().Parse();
var descriptor = new BulkDescriptor();
descriptor.CreateMany<FooBar>(foobars, (bd, q) => bd.Id(q.Id.ToString()).Index("foobars"));
Console.WriteLine($"Inserting foobars into ES...");
var sw = new Stopwatch();
sw.Start();
var result = es.Bulk<FooBar>(descriptor);
sw.Stop();
Console.WriteLine($"Finished inserting foobars {GetTimeTaken(sw.Elapsed)}");
}
更新 - 错误信息
我得到的错误是在从 Bulk() 方法返回的响应中...返回的 BulkResponse 的两个属性是:
原始异常:"The remote server returned an error: (400) Bad Request"
ServerError.Error: "Validation Failed: 1: no requests added"
您犯了一个简单的错误 - 您使用 Elasticsearch.Net 中的低级别 ElasticsearchClient
发出请求,但从 NEST 向其发送强类型批量请求。纠正很简单,你只需要使用 NEST
中的 ElasticClient
public static void AddQuestionsToElasticSearch()
{
var es = new ElasticClient(new Uri("http://elasticserver:9200"));
var foobars = new FooBar().Parse();
var descriptor = new BulkDescriptor();
descriptor.CreateMany<FooBar>(foobars, (bd, q) => bd.Id(q.Id.ToString()).Index("foobars"));
Console.WriteLine($"Inserting foobars into ES...");
var sw = new Stopwatch();
sw.Start();
var result = es.Bulk(descriptor);
sw.Stop();
Console.WriteLine($"Finished inserting foobars {GetTimeTaken(sw.Elapsed)}");
}
来自 NEST 的 ElasticClient
是高级客户端,并在幕后使用来自 Elasticsearch.Net 的 ElasticsearchClient
。
我将 2.1 版和 2.0(alpha)版客户端与 Nest C# 客户端一起使用...我试图批量插入一些记录,但是,服务器返回错误。我在与 Linux 服务器通信的 windows 客户端上使用客户端(不过我认为这无关紧要)。
public static void AddQuestionsToElasticSearch()
{
var es = new ElasticsearchClient(new ConnectionConfiguration(
new Uri("http://elasticserver:9200"))
);
var foobars = new FooBar().Parse();
var descriptor = new BulkDescriptor();
descriptor.CreateMany<FooBar>(foobars, (bd, q) => bd.Id(q.Id.ToString()).Index("foobars"));
Console.WriteLine($"Inserting foobars into ES...");
var sw = new Stopwatch();
sw.Start();
var result = es.Bulk<FooBar>(descriptor);
sw.Stop();
Console.WriteLine($"Finished inserting foobars {GetTimeTaken(sw.Elapsed)}");
}
更新 - 错误信息
我得到的错误是在从 Bulk() 方法返回的响应中...返回的 BulkResponse 的两个属性是:
原始异常:"The remote server returned an error: (400) Bad Request"
ServerError.Error: "Validation Failed: 1: no requests added"
您犯了一个简单的错误 - 您使用 Elasticsearch.Net 中的低级别 ElasticsearchClient
发出请求,但从 NEST 向其发送强类型批量请求。纠正很简单,你只需要使用 NEST
ElasticClient
public static void AddQuestionsToElasticSearch()
{
var es = new ElasticClient(new Uri("http://elasticserver:9200"));
var foobars = new FooBar().Parse();
var descriptor = new BulkDescriptor();
descriptor.CreateMany<FooBar>(foobars, (bd, q) => bd.Id(q.Id.ToString()).Index("foobars"));
Console.WriteLine($"Inserting foobars into ES...");
var sw = new Stopwatch();
sw.Start();
var result = es.Bulk(descriptor);
sw.Stop();
Console.WriteLine($"Finished inserting foobars {GetTimeTaken(sw.Elapsed)}");
}
来自 NEST 的 ElasticClient
是高级客户端,并在幕后使用来自 Elasticsearch.Net 的 ElasticsearchClient
。