1

Elasticsearch は Elasticsearch 2.3.0 で新しい Reindex API をリリースしましたが、現在のバージョンの NEST (2.1.1) はまだこの API を利用していますか? そうでない場合、そうする計画はありますか?現在のバージョンには reindex メソッドがあることは承知していますが、新しいインデックスを作成する必要があります。私のユースケースでは、インデックスはすでに存在しています。

フィードバック/洞察は大いに活用されます。サンクス!

4

1 に答える 1

1

この種の質問は、プロジェクトのコミッターが最もよく答えることができるため、NEST の github の問題で最もよく尋ねられます :)

4 月 6 日にコミットが行われ、Elasticsearch 2.3.0 で利用可能な新しい Reindex APIが、タスク管理 APIUpdate By Queryなどの他の機能とともにマップされました。これはNEST 2.3.0に導入されました

NEST 2.x には、カバーの下でスキャン/スクロールをIObservable<IReindexResponse<T>>使用し、進行状況を観察するために使用できるを返す再インデックス作成を行うためのヘルパーが既に含まれています。

public class Document {}

var observable = client.Reindex<Document>("from-index", "to-index", r => r
    // settings to use when creating to-index
    .CreateIndex(c => c
        .Settings(s => s
            .NumberOfShards(5)
            .NumberOfReplicas(2)
        )
    )
    // query to optionally limit documents re-indexed from from-index to to-index
    .Query(q => q.MatchAll())
    // the number of documents to reindex in each request.
    // NOTE: The number of documents in each request will actually be
    //     NUMBER * NUMBER OF SHARDS IN from-index
    // since reindex uses scan/scroll
    .Size(100)
);

ExceptionDispatchInfo e = null;
var waitHandle = new ManualResetEvent(false);

var observer = new ReindexObserver<Document>(
    onNext: reindexResponse =>
    {
        // do something with notification. Maybe log total progress
    },
    onError: exception =>
    {
        e = ExceptionDispatchInfo.Capture(exception);
        waitHandle.Set();
    },
    completed: () =>
    {
        // Maybe log completion, refresh the index, etc..
        waitHandle.Set();
    }
);

observable.Subscribe(observer);  

// wait for the handle to be signalled
waitHandle.Wait();

// throw the exception if one was captured
e?.Throw();

いくつかのアイデアについては、ReIndex API テストをご覧ください。

新しい Reindex API はclient.ReIndexOnServer()、既存の監視可能な実装と区別するために、クライアントで名前が付けられています。

于 2016-04-09T01:39:20.987 に答える