2

我正在使用 ElasticSeach 高级别的 api 客户端从另一个集群进行一些自定义重新索引。

    ReindexRequest reindexRequest = new ReindexRequest()
        .setMaxDocs(3000)
        .setDestIndex("my-new-index")
        .setTimeout(TimeValue.timeValueHours(1))
        .setRemoteInfo(
            new RemoteInfo("http", "otherhost", 9200, "/",
                new BytesArray(selectQuery.toString()), "user",
                "password",
                Map.of()), TimeValue.timeValueSeconds(30),
                TimeValue.timeValueSeconds(30)))
        .setSourceIndices("old-index")
        .setScript(new Script(ScriptType.STORED, null, "add_sc_id", Map.of("sc_id", some-id)));

      TaskSubmissionResponse task = esClient.submitReindexTask(reindexRequest, RequestOptions.DEFAULT);

我会定期检查任务以查看它是否已使用任务 API

Optional<GetTaskResponse> getTaskResponse =
            esClient.tasks().get(new GetTaskRequest(nodeId, taskId), RequestOptions.DEFAULT);

使用它,我可以查看任务是否已完成,getTaskResponse.get().isCompleted()但无论如何我都看不到它是否成功。

通过GET _taks/nodeId:taskId使用 curl,我看到有一个response.failures字段。

有没有办法用 Java High level rest api 客户端检索这个字段?还是有另一种方法可以实现这一目标?

4

1 回答 1

1

请检查列表任务 API

您可以使用以下 Java 代码获取任务失败信息:

ListTasksRequest request = new ListTasksRequest();
request.setActions("cluster:*"); 
request.setNodes("nodeId1", "nodeId2"); 
request.setParentTaskId(new TaskId("parentTaskId", 42)); 
ListTasksResponse responseTask = client.tasks().list(request,RequestOptions.DEFAULT);
List<TaskOperationFailure> taskFailures = response.getTaskFailures();
于 2022-01-24T10:16:39.820 回答