我将Nest 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(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)}");
}
更新-错误信息
我收到的错误是从Bulk()方法返回的响应中...返回的BulkResponse的两个属性是:
OriginalException:“远程服务器返回错误:(400)错误的请求”
ServerError.Error:“验证失败:1:未添加任何请求”
您犯了一个简单的错误-您使用的ElasticsearchClient
是Elasticsearch.Net 的低级请求,但从NEST发送了一个强类型的批量请求。要纠正很简单,您只需使用ElasticClient
NEST
public static void AddQuestionsToElasticSearch()
{
var es = new ElasticClient(new Uri("http://elasticserver:9200"));
var foobars = new FooBar().Parse();
var descriptor = new BulkDescriptor();
descriptor.CreateMany(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)}");
}
ElasticClient
来自NEST的是高级客户端,ElasticsearchClient
在后台使用Elasticsearch.Net。