为什么我的 elasticsearch update_by_query 超时?
Why is my elasticsearch update_by_query timing out?
我正在使用 Javascript 库并尝试对文档执行相当大的更新。我已经更改了查询本身以及客户端对象的超时值,但仍然出现似乎是 2 分钟的超时。下面是查询。
const arrayOfStrings = [...]; // This array could be between 10-12k elements in size
await elasticClient.updateByQuery({
index: "main-index",
refresh: true,
conflicts:"proceed",
script: {
lang: "painless",
source: "ctx._source.status = \"1\"; ctx._source.entities = []; for(term in params.array) ctx._source.entities.add(term);",
params: {
"array": arrayOfStrings
}
},
query: {
"term": {
"parent_id": 'dgd39gd3-db3dg23879-d893gdg38-e23ed' // There could be upwards of 5000 documents that match this criteria
}
},
timeout: "5m"
});
同样在弹性客户端上,我也将 requestTimeout
设置为“5m”。我可以理解为什么这个特定的查询可能会超时,因为它将 12k 元素数组应用于 5k 文档的字段。但是我不明白为什么当我设置了更长的超时值时查询仅在 2 分钟后超时。
你在这里需要做的是 运行 update by query asynchronously
await elasticClient.updateByQuery({
index: "main-index",
refresh: true,
conflicts:"proceed",
waitForCompletion: false <---- add this setting
然后您可以 异步执行任务 运行。
我正在使用 Javascript 库并尝试对文档执行相当大的更新。我已经更改了查询本身以及客户端对象的超时值,但仍然出现似乎是 2 分钟的超时。下面是查询。
const arrayOfStrings = [...]; // This array could be between 10-12k elements in size
await elasticClient.updateByQuery({
index: "main-index",
refresh: true,
conflicts:"proceed",
script: {
lang: "painless",
source: "ctx._source.status = \"1\"; ctx._source.entities = []; for(term in params.array) ctx._source.entities.add(term);",
params: {
"array": arrayOfStrings
}
},
query: {
"term": {
"parent_id": 'dgd39gd3-db3dg23879-d893gdg38-e23ed' // There could be upwards of 5000 documents that match this criteria
}
},
timeout: "5m"
});
同样在弹性客户端上,我也将 requestTimeout
设置为“5m”。我可以理解为什么这个特定的查询可能会超时,因为它将 12k 元素数组应用于 5k 文档的字段。但是我不明白为什么当我设置了更长的超时值时查询仅在 2 分钟后超时。
你在这里需要做的是 运行 update by query asynchronously
await elasticClient.updateByQuery({
index: "main-index",
refresh: true,
conflicts:"proceed",
waitForCompletion: false <---- add this setting
然后您可以