为什么我的 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

然后您可以 异步执行任务 运行。