Я пытаюсь добавить / обновить одно поле во всех документах индекса, используя минимальные запросы, но получаю ошибки: зависание сокета , а затем конфликт версий . Ссылаясь на этот 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 + .
Может кто-нибудь объяснить, почему я получаю эту ошибку в первом случае?