我正在使用版本2.1和2.0(alpha)客户端与Nest C#客户端...我试图批量插入一些记录,但是,服务器返回错误。我在Windows客户端上使用客户端与Linux服务器通信(但我不相信这应该重要)。
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上的两个属性是:
OriginalException:&#34;远程服务器返回错误:(400)错误请求&#34;
ServerError.Error:&#34;验证失败:1:未添加任何请求&#34;
答案 0 :(得分:4)
您犯了一个简单的错误 - 您使用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
。