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を使用して一括更新または削除を行うには、どちらが優れているか、または他のオプションを教えてもらえますか?
バルクリクエストをElasticsearchClient
、つまり_ElasticClient.Raw
_に渡す場合、バルクリクエストタイプを受け入れることができるElasticClient.BulkAsync()
またはElasticClient.Bulk()
に渡す必要があります。 。
BulkRequest
またはBulkDescriptor
の使用は クエリを作成するためにNESTによって提供される2つの異なるアプローチ ;前者はObject Initializer Syntaxを使用してリクエストオブジェクトを構築し、後者はFluent APIラムダ式を使用してリクエストを作成します。
あなたの例では、BulkDescriptor
は流暢なAPIのコンテキスト外で使用されていますが、BulkRequest
とBulkDescriptor
の両方がIBulkRequest
を実装しているため、ElasticClient.Bulk(IBulkRequest)
。
どちらを使用するかは、この場合はどちらでも構いません。