public override int RemoveTimedOutServers(TimeSpan timeOut) { if (timeOut.Duration() != timeOut) { throw new ArgumentException("The `timeOut` value must be positive.", nameof(timeOut)); } var timeOutAt = DateTime.UtcNow.Add(timeOut.Negate()); var getTimedOutServerIdsReponse = _elasticClient.ScrollingSearch <Model.Server>(descr => descr .StoredFields(sf => sf.Fields(new string[0])) .Query(query => query .DateRange(c => c .Field(field => field.LastHeartBeat) .LessThan(DateMath.Anchored(timeOutAt))))); var serverIds = getTimedOutServerIdsReponse.Select(x => x.Id); var bulkResponses = _elasticClient.BatchedBulk(serverIds, (descr, serverId) => descr.Delete <object>(desc => desc.Id(serverId).Type <Model.Server>())); return(bulkResponses.SelectMany(response => response.Items).Count()); }