public static Query MakeQuery(string q, OwnersResult owners) { var queryParser = new NuGetQueryParser(); var grouping = queryParser.ParseQuery(q); if (grouping.Count == 0) { return new MatchAllDocsQuery(); } return ConstructQuery(grouping, owners); }
private static IEnumerable <Filter> OwnerFilters( OwnersResult owners, HashSet <string> value) { foreach (var owner in value) { if (owners.KnownOwners.Contains(owner)) // don't filter if we have no such owner { yield return(new OwnersFilter(owners, owner)); } } }
public static Query MakeQuery(string q, OwnersResult owners) { var queryParser = new NuGetQueryParser(); var grouping = queryParser.ParseQuery(q); if (grouping.Count == 0) { return(new MatchAllDocsQuery()); } return(ConstructQuery(grouping, owners)); }
public NuGetIndexSearcher( NuGetSearcherManager manager, IndexReader reader, IDictionary <string, string> commitUserData, IDictionary <string, Filter> curatedFeeds, Dictionary <LatestListedMask, Filter> latest, IReadOnlyDictionary <string, int[]> docIdMapping, Downloads downloads, VersionResult[] versions, RankingResult rankings, QueryBoostingContext context, OpenBitSet latestBitSet, OpenBitSet latestStableBitSet, OpenBitSet latestSemVer2BitSet, OpenBitSet latestStableSemVer2BitSet, OwnersResult owners, HashSet <string> verifiedPackages) : base(reader) { Manager = manager; CommitUserData = commitUserData; _curatedFeeds = new Dictionary <string, Filter>(curatedFeeds.Count); foreach (var curatedFeedsFilter in curatedFeeds) { _curatedFeeds.Add(curatedFeedsFilter.Key, new CachingWrapperFilter(curatedFeedsFilter.Value)); } _latest = latest; DocIdMapping = docIdMapping; Downloads = downloads; Versions = versions; Rankings = rankings; LatestBitSet = latestBitSet; LatestStableBitSet = latestStableBitSet; LatestSemVer2BitSet = latestSemVer2BitSet; LatestStableSemVer2BitSet = latestStableSemVer2BitSet; Owners = owners; VerifiedPackages = verifiedPackages; QueryBoostingContext = context; LastReopen = DateTime.UtcNow; }
public NuGetIndexSearcher( NuGetSearcherManager manager, IndexReader reader, IDictionary<string, string> commitUserData, IDictionary<string, Filter> curatedFeeds, Filter[][] latest, IReadOnlyDictionary<string, int[]> docIdMapping, Downloads downloads, VersionResult[] versions, RankingResult rankings, QueryBoostingContext context, OpenBitSet latestBitSet, OpenBitSet latestStableBitSet, OwnersResult owners) : base(reader) { Manager = manager; CommitUserData = commitUserData; _curatedFeeds = new Dictionary<string, Filter>(curatedFeeds.Count); foreach (var curatedFeedsFilter in curatedFeeds) { _curatedFeeds.Add(curatedFeedsFilter.Key, new CachingWrapperFilter(curatedFeedsFilter.Value)); } _latest = latest; DocIdMapping = docIdMapping; Downloads = downloads; Versions = versions; Rankings = rankings; LatestBitSet = latestBitSet; LatestStableBitSet = latestStableBitSet; Owners = owners; QueryBoostingContext = context; LastReopen = DateTime.UtcNow; }
// Lucene Query creation logic private static Query ConstructQuery(Dictionary<QueryField, HashSet<string>> clauses, OwnersResult owners) { Analyzer analyzer = new PackageAnalyzer(); List<Filter> filters = new List<Filter>(); BooleanQuery booleanQuery = new BooleanQuery(); foreach (var clause in clauses) { switch (clause.Key) { case QueryField.Id: IdClause(booleanQuery, analyzer, clause.Value, Occur.MUST); break; case QueryField.PackageId: PackageIdClause(booleanQuery, analyzer, clause.Value); break; case QueryField.Version: VersionClause(booleanQuery, analyzer, clause.Value, Occur.MUST); break; case QueryField.Title: TitleClause(booleanQuery, analyzer, clause.Value, Occur.MUST); break; case QueryField.Description: DescriptionClause(booleanQuery, analyzer, clause.Value, Occur.MUST); break; case QueryField.Tag: TagClause(booleanQuery, analyzer, clause.Value, Occur.MUST); break; case QueryField.Author: AuthorClause(booleanQuery, analyzer, clause.Value, Occur.MUST); break; case QueryField.Summary: SummaryClause(booleanQuery, analyzer, clause.Value, Occur.MUST); break; case QueryField.Owner: if (owners != null) { filters.AddRange(OwnerFilters(owners, clause.Value)); } break; default: AnyClause(booleanQuery, analyzer, clause.Value); if (owners != null) { var ownerFilters = OwnerFilters(owners, clause.Value).ToList(); if (ownerFilters.Any()) { booleanQuery.Add(ConstructFilteredQuery(new MatchAllDocsQuery(), ownerFilters), Occur.SHOULD); } } break; } } // Determine if we have added any clauses - if not, match all docs Query query = booleanQuery; if (!booleanQuery.Clauses.Any()) { query = new MatchAllDocsQuery(); } // Any filters to add? query = ConstructFilteredQuery(query, filters); return query; }
private static IEnumerable<Filter> OwnerFilters( OwnersResult owners, HashSet<string> value) { foreach (var owner in value) { if (owners.KnownOwners.Contains(owner)) // don't filter if we have no such owner { yield return new OwnersFilter(owners, owner); } } }
public OwnersFilter(OwnersResult owners, string owner) { _owners = owners; _owner = owner; }
public void End(IndexReader indexReader) { Result = new OwnersResult(_knownOwners, _owners, _ownerTuples); }
// Lucene Query creation logic private static Query ConstructQuery(Dictionary <QueryField, HashSet <string> > clauses, OwnersResult owners) { Analyzer analyzer = new PackageAnalyzer(); List <Filter> filters = new List <Filter>(); BooleanQuery booleanQuery = new BooleanQuery(); foreach (var clause in clauses) { switch (clause.Key) { case QueryField.Id: IdClause(booleanQuery, analyzer, clause.Value, Occur.MUST); break; case QueryField.PackageId: PackageIdClause(booleanQuery, analyzer, clause.Value); break; case QueryField.Version: VersionClause(booleanQuery, analyzer, clause.Value, Occur.MUST); break; case QueryField.Title: TitleClause(booleanQuery, analyzer, clause.Value, Occur.MUST); break; case QueryField.Description: DescriptionClause(booleanQuery, analyzer, clause.Value, Occur.MUST); break; case QueryField.Tag: TagClause(booleanQuery, analyzer, clause.Value, Occur.MUST); break; case QueryField.Author: AuthorClause(booleanQuery, analyzer, clause.Value, Occur.MUST); break; case QueryField.Summary: SummaryClause(booleanQuery, analyzer, clause.Value, Occur.MUST); break; case QueryField.Owner: if (owners != null) { filters.AddRange(OwnerFilters(owners, clause.Value)); } break; default: AnyClause(booleanQuery, analyzer, clause.Value); if (owners != null) { var ownerFilters = OwnerFilters(owners, clause.Value).ToList(); if (ownerFilters.Any()) { booleanQuery.Add(ConstructFilteredQuery(new MatchAllDocsQuery(), ownerFilters), Occur.SHOULD); } } break; } } // Determine if we have added any clauses - if not, match all docs Query query = booleanQuery; if (!booleanQuery.Clauses.Any()) { query = new MatchAllDocsQuery(); } // Any filters to add? query = ConstructFilteredQuery(query, filters); return(query); }