使用 NEST 在 ElasticSearch 上批量更新
Bulk Update on ElasticSearch using NEST
我正在尝试使用 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
是two different approaches that are offered by NEST for writing queries;前者使用 Object Initializer Syntax 来构建请求对象,而后者在 Fluent API 中用于构建请求使用 lambda 表达式。
在您的示例中,BulkDescriptor
在流利 API 的上下文之外使用,但 BulkRequest
和 BulkDescriptor
都实现了 IBulkRequest
,因此可以传递给 ElasticClient.Bulk(IBulkRequest)
.
至于使用哪个,在这种情况下无所谓,所以你喜欢哪个。
我正在尝试使用 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
是two different approaches that are offered by NEST for writing queries;前者使用 Object Initializer Syntax 来构建请求对象,而后者在 Fluent API 中用于构建请求使用 lambda 表达式。
在您的示例中,BulkDescriptor
在流利 API 的上下文之外使用,但 BulkRequest
和 BulkDescriptor
都实现了 IBulkRequest
,因此可以传递给 ElasticClient.Bulk(IBulkRequest)
.
至于使用哪个,在这种情况下无所谓,所以你喜欢哪个。