【发布时间】:2018-10-22 13:33:39
【问题描述】:
我们有一个包含大约 200 万个文档的弹性索引,我需要一种方法来基于单个唯一字段更新它们的列表。我尝试的是在 Nest 中使用内置 updatebyquery 函数,但是我发现的文档要求我在我的代码中手动编写更新脚本,如下所示:
foreach (var document in batch)
{
var script = "ctx._source.brand_no = params.brandNo;" +
"ctx._source.order_no = params.orderNo";
var paramDict = new Dictionary<string, object>(){
{"brandNo",document.BrandNo},
{"orderNo",document.OrderNo}
};
await _clientProvider.ElasticClient
.UpdateByQueryAsync<Orderline>(x =>
x.Index(indexName).Query(q =>
q.Term(t =>
t.Field(f =>
f.OrderLineID).Value(document.OrderLineID))).Script(s =>
s.Source(script).Params(paramDict))));
}
我的问题是我的 Orderline 类非常大,而且这个硬编码的脚本很容易出错并且难以维护。
另一个问题是此更新需要很长时间才能处理 200 万行。
【问题讨论】:
标签: elasticsearch nest