обновить несколько документов вasticsearch? - PullRequest
0 голосов
/ 29 января 2019

В моем текущем коде я выбираю несколько документов и затем обновляю их один за другим следующим образом:

results.hits.hits.forEach(function (hit) {
             hit._source.taskName = 'My-task-name';
             esClient.bulk({
                 body: [
                     {update: {_index: 'my-index', _type: 'default', _id: hit._id}},
                     {doc: hit._source}
                 ]
             }, function (err, resp) {
                 // ...
                 if (err) {
                     console.log(err);
                 }
                 if(resp) {
                     console.log(resp)
                 }
             });
         });

У этого подхода есть проблема с тайм-аутом.

Итак, я хочу обновить несколько документов за один запрос.Но я не уверен, как создать тело для него, отправить запрос асинхронно, а затем, как поступить с ответом.В основном я хотел бы разбить «результаты» на куски, скажем, на 100 документов, и обновить чанк в одном запросе.

1 Ответ

0 голосов
/ 29 января 2019

Вместо этого вы можете сделать это следующим образом, то есть сначала создать все массовые команды, а затем вызвать конечную точку _bulk:

const bulk = [];
results.hits.hits.forEach(function (hit) {
    hit._source.taskName = 'My-task-name';
    bulk.push({update: {_index: 'my-index', _type: 'default', _id: hit._id}});
    bulk.push({doc: hit._source});
});

esClient.bulk({
    body: bulk
}, function (err, resp) {
    // ...
    if (err) {
        console.log(err);
    }
    if(resp) {
        console.log(resp)
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...