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);
            }
        }