web-dev-qa-db-ja.com

NESTを使用したElasticSearchの一括更新

NESTを使用してES上のドキュメントを置き換えようとしています。次のオプションが利用できるようです。

オプション1:

var documents = new List<dynamic>();

`var blkOperations = documents.Select(doc => new BulkIndexOperation<T>`(doc)).Cast<IBulkOperation>().ToList();   
var blkRequest = new BulkRequest()
{
    Refresh = true,
    Index = indexName,
    Type = typeName,
    Consistency = Consistency.One,
    Operations = blkOperations
};
var response1 = _client.Raw.BulkAsync<T>(blkRequest);

オプション#2:

var descriptor = new BulkDescriptor();
foreach (var eachDoc in document)
{
    var doc = eachDoc;
    descriptor.Index<T>(i => i
        .Index(indexName)
        .Type(typeName)
        .Document(doc));
}
var response = await _client.Raw.BulkAsync<T>(descriptor);

では、NESTを使用して一括更新または削除を行うには、どちらが優れているか、または他のオプションを教えてもらえますか?

14
Sasi

バルクリクエストをElasticsearchClient、つまり_ElasticClient.Raw_に渡す場合、バルクリクエストタイプを受け入れることができるElasticClient.BulkAsync()またはElasticClient.Bulk()に渡す必要があります。 。

BulkRequestまたはBulkDescriptorの使用は クエリを作成するためにNESTによって提供される2つの異なるアプローチ ;前者はObject Initializer Syntaxを使用してリクエストオブジェクトを構築し、後者はFluent APIラムダ式を使用してリクエストを作成します。

あなたの例では、BulkDescriptorは流暢なAPIのコンテキスト外で使用されていますが、BulkRequestBulkDescriptorの両方がIBulkRequestを実装しているため、ElasticClient.Bulk(IBulkRequest)

どちらを使用するかは、この場合はどちらでも構いません。

6
Russ Cam