Как лучше всего знать, когда длительный запрос Elasticsearch завершен?
Сегодня у меня есть процесс, который периодически удаляет ~ 100K документов из размещенной в AWS ES, содержащейвсего ~ 60 млн. документов.
var settings = new ConnectionSettings(new Uri("https://mycompany.es.aws.com"));
settings.RequestTimeout(TimeSpan.FromMinutes(3)); // not sure this helps
var client = new ElasticClient(settings);
var request = new DeleteByQueryRequest("MyIndex") { ... };
// this call will return an IsValid = true, httpstatus = 504 after ~60s,
var response = await client.DeleteByQueryAsync(request);
Даже при тайм-ауте, установленном на 3 минуты, вызов всегда возвращается через ~ 60 с пустым ответом и кодом состояния 504.Хотя через Kibana я вижу, что действие удаления продолжается (и правильно завершается) в течение следующих нескольких минут.
Есть ли лучший способ запрашивать и отслеживать (ждать завершения) длительный запрос ES?
ОБНОВЛЕНИЕ
На основании ответа Саймона Ланга я обновил свой код, чтобы использовать задачи ES.Окончательное решение выглядит примерно так ...
var settings = new ConnectionSettings(new Uri("https://mycompany.es.aws.com"));
settings.RequestTimeout(TimeSpan.FromMinutes(3)); // not sure this helps
var client = new ElasticClient(settings);
var request = new DeleteByQueryRequest("MyIndex")
{
Query = ...,
WaitForCompletion = false
};
var response = await client.DeleteByQueryAsync(request);
if (response.IsValid)
{
var taskCompleted = false;
while (!taskCompleted)
{
var taskResponse = await client.GetTaskAsync(response.Task);
taskCompleted = taskResponse.Completed;
if (!taskCompleted)
{
await Task.Delay(5000);
}
}
}