private async Task UpdateFilterStartDateRangesAsync(ElasticQuery filter, DateTime utcEnd) { // TODO: Cache this to save an extra search request when a date range isn't filtered. var descriptor = new SearchDescriptor <PersistentEvent>() .IgnoreUnavailable() .Indices(_configuration.Events.Event.GetIndexesByQuery(filter)) .Type(_configuration.Events.Event.Name) .SortAscending(ev => ev.Date) .Take(1); _configuration.Events.Event.QueryBuilder.ConfigureSearch(filter, GetQueryOptions(), descriptor); var response = await _configuration.Client.SearchAsync <PersistentEvent>(descriptor).AnyContext(); _logger.Trace(() => response.GetRequest()); if (!response.IsValid) { string message = $"Error getting updated start date: {response.GetErrorMessage()}"; _logger.Error().Exception(response.ConnectionStatus.OriginalException).Message(message).Property("request", response.GetRequest()).Write(); throw new ApplicationException(message, response.ConnectionStatus.OriginalException); } var firstEvent = response.Hits.FirstOrDefault()?.Source; if (firstEvent != null) { filter.DateRanges.Clear(); filter.WithDateRange(firstEvent.Date.UtcDateTime, utcEnd, EventIndexType.Fields.Date); filter.Indexes.Clear(); filter.WithIndexes(firstEvent.Date.UtcDateTime, utcEnd); } }