Nest updatebyquery, как я могу использовать Poco вместо написания сценария - PullRequest
0 голосов
/ 19 октября 2018

У нас есть эластичный индекс с примерно 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 миллионов строк.

1 Ответ

0 голосов
/ 22 октября 2018

Моя проблема в том, что мой класс Orderline довольно большой, и этот жестко закодированный скрипт очень подвержен ошибкам и его трудно поддерживать.

Обновление только по API запросов толькоподдерживает обновление с помощью сценариев, чтобы вы могли реализовать небольшой компонент, который генерирует сценарий из заданного экземпляра POCO, чтобы уменьшить вероятность ошибок в сценарии.

Другая проблема заключается в том, что это обновление занимает много временидля 2 миллионов строк.

Будет ли индексирование документов в новом индексе и использование псевдонимов для указания на индекс более новой версии работать в вашем случае?Обновление / удаление миллионов документов в существующем индексе - это относительно дорогостоящая операция.

...