15

我正在尝试使用 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 进行批量更新或删除的任何其他选项?

4

1 回答 1

7

您正在将批量请求传递给ElasticsearchClientie ElasticClient.Raw,当您应该将它传递给ElasticClient.BulkAsync()或者ElasticClient.Bulk()可以接受批量请求类型时。

使用BulkRequestorBulkDescriptorNEST 为编写查询提供的两种不同方法;前者使用Object Initializer Syntax构建请求对象,而后者在Fluent API中使用 lambda 表达式构建请求。

在您的示例中,BulkDescriptor在流式 API 的上下文之外使用,但两者BulkRequestBulkDescriptor实现IBulkRequest都可以传递给ElasticClient.Bulk(IBulkRequest).

至于使用哪个,在这种情况下,无论您喜欢哪个都没有关系。

于 2016-02-01T22:48:28.003 回答