Ejemplo n.º 1
0
        private static IQueryable<LucenePackage> ApplySort(SearchCriteria criteria, IQueryable<LucenePackage> packages)
        {
            Expression<Func<LucenePackage, object>> sortSelector = null;

            switch (criteria.SortField)
            {
                case SearchSortField.Id:
                    sortSelector = p => p.Id;
                    break;
                case SearchSortField.Title:
                    sortSelector = p => p.Title;
                    break;
                case SearchSortField.Published:
                    sortSelector = p => p.Published;
                    break;
                case SearchSortField.Score:
                    sortSelector = p => p.Score();
                    break;
            }

            if (sortSelector == null)
            {
                return packages;
            }

            var orderedPackages = criteria.SortDirection == SearchSortDirection.Ascending
                    ? packages.OrderBy(sortSelector)
                    : packages.OrderByDescending(sortSelector);

            if (criteria.SortField == SearchSortField.Id)
            {
                orderedPackages = orderedPackages.ThenByDescending(p => p.Version);
            }

            return orderedPackages;
        }
Ejemplo n.º 2
0
        protected virtual IQueryable<LucenePackage> ApplySearchCriteria(SearchCriteria criteria, IQueryable<LucenePackage> packages)
        {
            var advancedQuerySyntax = criteria.SearchTerm.Any(c => AdvancedQueryCharacters.Contains(c));

            if (advancedQuerySyntax)
            {
                var queryParser = new NuGetQueryParser(LuceneDataProvider.CreateQueryParser<LucenePackage>())
                {
                    AllowLeadingWildcard = true
                };

                try
                {
                    var query = queryParser.Parse(criteria.SearchTerm);
                    return packages.Where(query);
                }
                catch (ParseException ex)
                {
                    throw new InvalidSearchCriteriaException("Failed to parse query", ex);
                }
            }

            return from
                pkg in packages
                where
                    ((pkg.Id == criteria.SearchTerm).Boost(5) ||
                     (pkg.SearchId == criteria.SearchTerm).Boost(4) ||
                     (pkg.Title == criteria.SearchTerm).Boost(3) ||
                     (pkg.Tags == criteria.SearchTerm).Boost(2) ||
                     (pkg.Authors.Contains(criteria.SearchTerm) || pkg.Owners.Contains(criteria.SearchTerm)).Boost(2) ||
                     (pkg.Files.Contains(criteria.SearchTerm)) ||
                     (pkg.Summary == criteria.SearchTerm || pkg.Description == criteria.SearchTerm)).AllowSpecialCharacters()
                select
                    pkg;
        }
Ejemplo n.º 3
0
        public IQueryable<IPackage> Search(SearchCriteria criteria)
        {
            var packages = LucenePackages;

            if (!string.IsNullOrEmpty(criteria.SearchTerm))
            {
                packages = ApplySearchCriteria(criteria, packages);
            }

            if (!criteria.AllowPrereleaseVersions)
            {
                packages = packages.Where(p => !p.IsPrerelease);
            }

            if (criteria.TargetFrameworks != null && criteria.TargetFrameworks.Any())
            {
                packages = ApplyTargetFrameworkFilter(criteria, packages);
            }

            if (criteria.PackageOriginFilter != PackageOriginFilter.Any)
            {
                var flag = criteria.PackageOriginFilter == PackageOriginFilter.Mirror;
                packages = packages.Where(p => p.IsMirrored == flag);
            }

            packages = ApplySort(criteria, packages);

            return packages;
        }
Ejemplo n.º 4
0
 protected virtual IQueryable<LucenePackage> ApplyTargetFrameworkFilter(SearchCriteria criteria, IQueryable<LucenePackage> packages)
 {
     return frameworkCompatibilityTool.FilterByTargetFramework(packages, criteria.TargetFrameworks.First());
 }
        public IQueryable<IPackage> Search(SearchCriteria criteria)
        {
            var packages = LucenePackages;

            if (!string.IsNullOrEmpty(criteria.SearchTerm))
            {
                packages = from
                                pkg in packages
                           where
                                ((pkg.Id == criteria.SearchTerm || pkg.Title == criteria.SearchTerm).Boost(3) ||
                                (pkg.Tags == criteria.SearchTerm).Boost(2) ||
                                (pkg.Authors.Contains(criteria.SearchTerm) || pkg.Owners.Contains(criteria.SearchTerm)).Boost(2) ||
                                (pkg.Summary == criteria.SearchTerm || pkg.Description == criteria.SearchTerm)).AllowSpecialCharacters()
                           select
                               pkg;
            }

            if (!criteria.AllowPrereleaseVersions)
            {
                packages = packages.Where(p => !p.IsPrerelease);
            }

            if (criteria.PackageOriginFilter != PackageOriginFilter.Any)
            {
                var flag = criteria.PackageOriginFilter == PackageOriginFilter.Mirror;
                packages = packages.Where(p => p.IsMirrored == flag);
            }

            packages = ApplySort(criteria, packages);

            return packages;
        }