如何在nest中进行批量部分更新而不首先获取项目?

y53ybaqx  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(0)|浏览(304)

我想在elasticsearch中使用nest对批量操作中的一个字段进行部分更新。
这是我的密码

public async Task BulkUpdate<TOrig, TUpdate>(List<TUpdate> request) where TOrig : class where TUpdate : class
{
    ConnectionSettings settings = new ConnectionSettings(new Uri(Url))
        .DefaultIndex(IndexName);

    ElasticClient client = new ElasticClient(settings);

    BulkResponse response = await client.BulkAsync(b => 
        b.UpdateMany<TOrig, TUpdate>(request, (bu, doc) => 
             bu.Doc(doc)));

}

我想这样称呼它:

foreach (GetRecycleBinResult recyclingItem in recyclingItems)
{
    bulkRequest.Add(new MarkFileDeletedRequest { Id = recyclingItem.Id, Deleted = true });
}

await indexer.BulkUpdate(bulkRequest);

这是我想做的,但它不让我做,因为它想 request 以及 doc 属于 TOrig 而我希望他们是部分的( TUpdate ). 我看到的例子显示,首先从elasticsearch获得结果,然后将它们传递到我需要的地方 request 但是这是非常低效的,并且违背了一开始就有一个批量请求的要点。
更新
我可以使用 BulkDescriptor 班级:

ConnectionSettings settings = new ConnectionSettings(new Uri(Url))
    .DefaultIndex(IndexName);

ElasticClient client = new ElasticClient(settings);
BulkDescriptor descriptor = new BulkDescriptor();

foreach (KeyValuePair<Guid, TUpdate> item in request)
{
    descriptor.Update<TOrig, TUpdate>(a => a.Id(item.Key).Doc(item.Value));
}

BulkResponse response = await client.BulkAsync(descriptor);

但是为什么它不能与fluent api一起工作呢?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题