in src/Elastic.Clients.Elasticsearch/_Shared/Api/BulkRequest.cs [173:230]
public BulkRequestDescriptor CreateMany<TSource>(IEnumerable<TSource> documents, Action<BulkCreateOperationDescriptor<TSource>, TSource> bulkCreateSelector) =>
AddOperations(documents, bulkCreateSelector, o => new BulkCreateOperationDescriptor<TSource>(o), x => x.Instance);
public BulkRequestDescriptor CreateMany<TSource>(IEnumerable<TSource> documents) =>
AddOperations(documents, null, o => new BulkCreateOperationDescriptor<TSource>(o), x => x.Instance);
public BulkRequestDescriptor IndexMany<TSource>(IEnumerable<TSource> documents, Action<BulkIndexOperationDescriptor<TSource>, TSource> bulkIndexSelector) =>
AddOperations(documents, bulkIndexSelector, o => new BulkIndexOperationDescriptor<TSource>(o), x => x.Instance);
public BulkRequestDescriptor IndexMany<TSource>(IEnumerable<TSource> documents) =>
AddOperations(documents, null, o => new BulkIndexOperationDescriptor<TSource>(o), x => x.Instance);
public BulkRequestDescriptor UpdateMany<TSource>(IEnumerable<TSource> objects, Action<BulkUpdateOperationDescriptor<TSource, TSource>, TSource> bulkIndexSelector) =>
AddOperations(objects, bulkIndexSelector, o => new BulkUpdateOperationDescriptor<TSource, TSource>().IdFrom(o), x => x.Instance);
public BulkRequestDescriptor UpdateMany<TSource>(IEnumerable<TSource> objects) =>
AddOperations(objects, null, o => new BulkUpdateOperationDescriptor<TSource, TSource>().IdFrom(o), x => x.Instance);
public BulkRequestDescriptor DeleteMany<T>(IEnumerable<T> objects, Action<BulkDeleteOperationDescriptor, T> bulkDeleteSelector) =>
AddOperations(objects, bulkDeleteSelector, obj => new BulkDeleteOperationDescriptor(new Id(obj)), x => x.Instance);
public BulkRequestDescriptor DeleteMany(IEnumerable<Id> ids, Action<BulkDeleteOperationDescriptor, Id> bulkDeleteSelector) =>
AddOperations(ids, bulkDeleteSelector, id => new BulkDeleteOperationDescriptor(id), x => x.Instance);
public BulkRequestDescriptor DeleteMany<T>(IEnumerable<T> objects) =>
AddOperations(objects, null, obj => new BulkDeleteOperationDescriptor<T>(obj), x => x.Instance);
public BulkRequestDescriptor DeleteMany(IndexName index, IEnumerable<Id> ids) =>
AddOperations(ids, null, id => new BulkDeleteOperationDescriptor(id).Index(index), x => x.Instance);
private BulkRequestDescriptor AddOperations<TSource, TDescriptor>(
IEnumerable<TSource>? objects,
Action<TDescriptor, TSource>? configureDescriptor,
Func<TSource, TDescriptor> createDescriptor,
Func<TDescriptor, IBulkOperation> getInstance)
{
if (@objects == null)
return this;
var objectsList = @objects.ToList();
var operations = new List<IBulkOperation>(objectsList.Count());
foreach (var o in objectsList)
{
var descriptor = createDescriptor(o);
if (configureDescriptor is not null)
{
configureDescriptor(descriptor, o);
}
operations.Add(getInstance(descriptor));
}
Instance.Operations ??= new();
Instance.Operations.AddRange(operations);
return this;
}