3

バージョン 2.1 と 2.0 (アルファ) クライアントを 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 の 2 つのプロパティは次のとおりです。

OriginalException: "リモート サーバーがエラーを返しました: (400) Bad Request"

ServerError.Error: "検証に失敗しました: 1: リクエストが追加されていません"

4

1 に答える 1

5

あなたは単純な間違いを犯しましたElasticsearchClient.Elasticsearch.Netの低レベルを使用してリクエストを作成していますが、NESTから強く型付けされた一括リクエストを送信しています. ElasticClient修正するのは簡単です。 from 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<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)}");
}

ElasticClientfrom NEST は高レベルのクライアントでありElasticsearchClient、内部で Elasticsearch.Net を使用します。

于 2016-01-12T21:56:25.060 に答える