如何解决IndexManyAsync 和 BulkAsync 有什么区别?
我有这两种方法可以索引产品。 nesT 中的 IndexManyAsync 和 BulkAsync 这两个选项有什么区别?
public async Task savemanyAsync(Product[] products)
{
var result = await _elasticclient.IndexManyAsync(products);
}
public async Task SaveBulkAsync(Product[] products)
{
var result = await _elasticclient.BulkAsync(b => b.Index("products").IndexMany(products));
}
解决方法
IndexManyAsync
只是 NEST 客户端中的一种方便的方法,它将在内部使用 Bulk
。
来自docs:
这些方法特定于 NEST 客户端,以提供使用 _bulk 端点索引多个文档的便捷快捷方式。
如有疑问,您可以查看source code:
/// <summary>
/// Shortcut into the Bulk call that indexes the specified objects
/// <para> </para>
/// https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html
/// </summary>
/// <param name="client"></param>
/// <typeparam name="T">The type used to infer the default index and typename</typeparam>
/// <param name="objects">List of objects to index,Id will be inferred (Id property or IdProperty attribute on type)</param>
/// <param name="index">Override the inferred indexname for T</param>
/// <param name="type">Override the inferred typename for T</param>
public static Task<BulkResponse> IndexManyAsync<T>(this IElasticClient client,IEnumerable<T> objects,IndexName index = null,CancellationToken cancellationToken = default
)
where T : class
{
var bulkRequest = CreateIndexBulkRequest(objects,index);
return client.BulkAsync(bulkRequest,cancellationToken);
}
private static BulkRequest CreateIndexBulkRequest<T>(IEnumerable<T> objects,IndexName index) where T : class
{
var bulkRequest = new BulkRequest(index);
var indexOps = @objects
.NotEmpty(nameof(objects))
.Select(o => new BulkIndexOperation<T>(o))
.Cast<IBulkOperation>()
.ToList();
bulkRequest.Operations = new BulkOperationsCollection<IBulkOperation>(indexOps);
return bulkRequest;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。