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()))); }
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}'"); }
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); }
public async Task <SearchResponse> SearchAsync(SearchRequest request, CancellationToken cancellationToken = default) { return(await SearchAsync(BaGetSearchRequest.FromSearchRequest(request), cancellationToken)); }