У нас есть эластичный индекс с примерно 2 миллионами документов, мне нужен способ обновить их список на основе одного уникального поля.То, что я пробовал, - это использовать встроенную функцию updatebyquery в Nest, но в той документации, которую я нашел, мне нужно написать скрипт обновления вручную в моем коде, например так:
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 довольно большой, и этот жестко запрограммированный скрипт очень подвержен ошибкам и его трудно поддерживать.
Другая проблема заключается в том, что это обновление занимает много времени для 2 миллионов строк.