我想在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一起工作呢?
暂无答案!
目前还没有任何答案,快来回答吧!