Почему update_by_query возвращает ошибку "зависание сокета" при попытке обновить большое количество документов? - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь добавить / обновить одно поле во всех документах индекса, используя минимальные запросы, но получаю ошибки: зависание сокета , а затем конфликт версий . Ссылаясь на этот update_by_query , я попытался выполнить аналогичный запрос для своего варианта использования, то есть

esClient.updateByQuery({
  index: "test_index",
  type: "_doc",
  body: {
    query: {
      match_all: {}
    },
    script: {
      lang: "painless",
      source: `ctx._source.name=params.name;`,
      params: { name: "raghu" }
    }
  }
});

. После еще одного исследования я добавил эту опцию conflicts: "proceed", после которой конфликт версий не приходит, но я все еще получаю трубка зависает ошибка.

====================== ================================================== =======================

Хотя я могу решить эту проблему, используя следующее решение, и оно работает нормально:

const limit = 10000;
//Iterating infinitely
while (true) {
  //adding required field for every batch if it doeas not exist
  const result = await esClient.updateByQuery({
    index: "test_index",
    type: "_doc",
    body: {
      query: {
        bool: {
          must_not: {
            exists: {
              field: "name"
            }
          }
        }
      },
      script: {
        lang: "painless",
        source: "ctx._source.name=params.name;",
        params: { name: "raghu" }
      }
    },
    size: limit,
    conflicts: "proceed"
  });
  const { updated } = result;
  //stop once updated result length is less than limit
  if (updated < limit) {
    //Done
    return result;
  }
}

Я использую Elasti c Поиск v6.3.0 и NodeJs v10 + .

Может кто-нибудь объяснить, почему я получаю эту ошибку в первом случае?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...