Esempio n. 1
0
        public async Task <SearchResponse> SearchAsync(BaGetSearchRequest request, CancellationToken cancellationToken = default)
        {
            var query      = BuildSeachQuery(request);
            var filter     = BuildSearchFilter(request);
            var parameters = new SearchParameters
            {
                IncludeTotalResultCount = true,
                QueryType = QueryType.Full,
                Skip      = request.Skip,
                Top       = request.Take,
                Filter    = filter
            };

            var response = await _searchClient.Documents.SearchAsync <PackageDocument>(query, parameters, cancellationToken : cancellationToken);

            var results = new List <SearchResult>();

            foreach (var result in response.Results)
            {
                var document = result.Document;
                var versions = new List <SearchResultVersion>();

                if (document.Versions.Length != document.VersionDownloads.Length)
                {
                    throw new InvalidOperationException($"Invalid document {document.Key} with mismatched versions");
                }

                for (var i = 0; i < document.Versions.Length; i++)
                {
                    var downloads = long.Parse(document.VersionDownloads[i]);
                    var version   = NuGetVersion.Parse(document.Versions[i]);
                    var url       = _url.GetRegistrationLeafUrl(document.Id, version);

                    versions.Add(new SearchResultVersion(url, version, downloads));
                }

                results.Add(new SearchResult(
                                document.Id,
                                NuGetVersion.Parse(document.Version),
                                document.Description,
                                document.Authors,
                                document.IconUrl,
                                document.LicenseUrl,
                                document.ProjectUrl,
                                _url.GetRegistrationIndexUrl(document.Id),
                                document.Summary,
                                document.Tags,
                                document.Title,
                                document.TotalDownloads,
                                versions));
            }

            return(new SearchResponse(
                       response.Count.Value,
                       results,
                       SearchContext.Default(_url.GetPackageMetadataResourceUrl())));
        }
Esempio n. 2
0
        private string BuildSearchFilter(BaGetSearchRequest request)
        {
            var searchFilters = SearchFilters.Default;

            if (request.IncludePrerelease)
            {
                searchFilters |= SearchFilters.IncludePrerelease;
            }

            if (request.IncludeSemVer2)
            {
                searchFilters |= SearchFilters.IncludeSemVer2;
            }

            return($"searchFilters eq '{searchFilters}'");
        }
Esempio n. 3
0
        private string BuildSeachQuery(BaGetSearchRequest request)
        {
            var query = string.Empty;

            if (!string.IsNullOrEmpty(request.Query))
            {
                query = request.Query.TrimEnd().TrimEnd('*') + '*';
            }

            if (!string.IsNullOrEmpty(request.PackageType))
            {
                query = $"+packageTypes:{request.PackageType} {query}";
            }

            if (!string.IsNullOrEmpty(request.Framework))
            {
                var frameworks = _frameworks.FindAllCompatibleFrameworks(request.Framework);

                query = $"+frameworks:({string.Join(" ", frameworks)}) {query}";
            }

            return(query);
        }
Esempio n. 4
0
 public async Task <SearchResponse> SearchAsync(SearchRequest request, CancellationToken cancellationToken = default)
 {
     return(await SearchAsync(BaGetSearchRequest.FromSearchRequest(request), cancellationToken));
 }