/// <summary>
        /// Searches the NuGet gallery for data matching the provided search term.
        /// </summary>
        /// <param name="searchTerm">Search term used to filter results from NuGet gallery.</param>
        /// <param name="filters">Additional details used to limit the search results.</param>
        /// <param name="skip">Record index of the starting record to be returned.</param>
        /// <param name="take">Number of result records to include in the search results.</param>
        /// <param name="log">Logger used to capture debugging information during the search.</param>
        /// <param name="cancellationToken">Token used to interrupt the search.</param>
        /// <returns>An instance of <see cref="PackageSearchResults"/> containing paging data and search results.</returns>
        public async Task <PackageSearchResults> SearchPageableAsync(string searchTerm, SearchFilter filters, int skip, int take, ILogger log, CancellationToken cancellationToken)
        {
            var response = await _searchResource.SearchPage(searchTerm, filters, skip, take, NullLogger.Instance, cancellationToken);

            return(new PackageSearchResults
            {
                TotalCount = (int)response["totalHits"],
                LastReopen = DateTimeOffset.Parse((string)response["lastReopen"]),
                Index = (string)response["index"],
                Results = response["data"]
                          .Values <JObject>()
                          .Select(t => JsonExtensions.FromJToken <PackageSearchMetadata>(t))
                          .Select(m => m.WithVersions(GetVersions(m, filters)))
                          .ToArray()
            });
        }