Exemple #1
0
        public static void Search(JsonWriter jsonWriter,
                                  NuGetSearcherManager searcherManager,
                                  string scheme,
                                  string q,
                                  bool includePrerelease,
                                  NuGetVersion semVerLevel,
                                  int skip,
                                  int take,
                                  string feed,
                                  bool includeExplanation)
        {
            var searcher = searcherManager.Get();

            try
            {
                Query query = MakeSearchQuery(q, searcher);

                Filter filter = null;

                if (searcher.TryGetFilter(false, includePrerelease, semVerLevel, feed, out filter))
                {
                    // Filter before running the query (make the search set smaller)
                    query = new FilteredQuery(query, filter);
                }

                TopDocs topDocs = searcher.Search(query, skip + take);

                ResponseFormatter.WriteSearchResult(jsonWriter, searcher, scheme, topDocs, skip, take, includePrerelease, includeExplanation, semVerLevel, query);
            }
            finally
            {
                searcherManager.Release(searcher);
            }
        }
Exemple #2
0
        public static void AutoComplete(
            JsonWriter jsonWriter,
            NuGetSearcherManager searcherManager,
            string q,
            string id,
            bool includePrerelease,
            NuGetVersion semVerLevel,
            int skip,
            int take,
            bool includeExplanation)
        {
            var searcher = searcherManager.Get();

            try
            {
                Filter filter = null;

                if (q != null)
                {
                    Query query = MakeAutoCompleteQuery(q,
                                                        searcher.DocIdMapping,
                                                        searcher.Downloads,
                                                        searcher.Rankings,
                                                        searcher.QueryBoostingContext);

                    if (searcher.TryGetFilter(false, includePrerelease, semVerLevel, null, out filter))
                    {
                        // Filter before running the query (make the search set smaller)
                        query = new FilteredQuery(query, filter);
                    }

                    TopDocs topDocs = searcher.Search(query, skip + take);
                    ResponseFormatter.WriteAutoCompleteResult(jsonWriter, searcher, topDocs, skip, take, includeExplanation, query);
                }
                else
                {
                    Query query = MakeAutoCompleteVersionQuery(id);

                    if (searcher.TryGetFilter(false, includePrerelease, semVerLevel, null, out filter))
                    {
                        // Filter before running the query (make the search set smaller)
                        query = new FilteredQuery(query, filter);
                    }

                    TopDocs topDocs = searcher.Search(query, 1);
                    ResponseFormatter.WriteAutoCompleteVersionResult(jsonWriter, searcher, includePrerelease, semVerLevel, topDocs);
                }
            }
            finally
            {
                searcherManager.Release(searcher);
            }
        }
        public static void Stats(JsonWriter jsonWriter, NuGetSearcherManager searcherManager)
        {
            var searcher = searcherManager.Get();

            try
            {
                ResponseFormatter.WriteStatsResult(jsonWriter, searcher);
            }
            finally
            {
                searcherManager.Release(searcher);
            }
        }
Exemple #4
0
        protected override void Warm(NuGetIndexSearcher searcher)
        {
            _logger.LogInformation("NuGetSearcherManager.Warm");
            var stopwatch = Stopwatch.StartNew();

            // Warmup search (query all documents)
            searcher.Search(new MatchAllDocsQuery(), 1);

            // Warmup search (query for a specific term with rankings)
            var query = NuGetQuery.MakeQuery("newtonsoft.json", searcher.Owners);

            var boostedQuery = new DownloadsBoostedQuery(query,
                                                         searcher.DocIdMapping,
                                                         searcher.Downloads,
                                                         searcher.Rankings,
                                                         QueryBoostingContext.Default);

            searcher.Search(boostedQuery, 5);

            // Warmup search (with a sort so Lucene field caches are populated)
            var sort1 = new Sort(new SortField("LastEditedDate", SortField.INT, reverse: true));
            var sort2 = new Sort(new SortField("PublishedDate", SortField.INT, reverse: true));
            var sort3 = new Sort(new SortField("SortableTitle", SortField.STRING, reverse: false));
            var sort4 = new Sort(new SortField("SortableTitle", SortField.STRING, reverse: true));

            var topDocs1 = searcher.Search(boostedQuery, null, 250, sort1);
            var topDocs2 = searcher.Search(boostedQuery, null, 250, sort2);
            var topDocs3 = searcher.Search(boostedQuery, null, 250, sort3);
            var topDocs4 = searcher.Search(boostedQuery, null, 250, sort4);

            // Warmup field caches by fetching data from them
            using (var writer = new JsonTextWriter(new StreamWriter(new MemoryStream())))
            {
                ResponseFormatter.WriteV2Result(writer, searcher, topDocs1, 0, 250, SemVerHelpers.SemVer2Level);
                ResponseFormatter.WriteSearchResult(writer, searcher, "http", topDocs1, 0, 250, false, false, SemVerHelpers.SemVer2Level, boostedQuery);

                ResponseFormatter.WriteV2Result(writer, searcher, topDocs2, 0, 250, SemVerHelpers.SemVer2Level);
                ResponseFormatter.WriteSearchResult(writer, searcher, "http", topDocs2, 0, 250, false, false, SemVerHelpers.SemVer2Level, boostedQuery);

                ResponseFormatter.WriteV2Result(writer, searcher, topDocs3, 0, 250, SemVerHelpers.SemVer2Level);
                ResponseFormatter.WriteSearchResult(writer, searcher, "http", topDocs3, 0, 250, false, false, SemVerHelpers.SemVer2Level, boostedQuery);

                ResponseFormatter.WriteV2Result(writer, searcher, topDocs4, 0, 250, SemVerHelpers.SemVer2Level);
                ResponseFormatter.WriteSearchResult(writer, searcher, "http", topDocs4, 0, 250, false, false, SemVerHelpers.SemVer2Level, boostedQuery);
            }

            // Done, we're warm.
            stopwatch.Stop();
            _logger.LogInformation("NuGetSearcherManager.Warm: completed in {IndexSearcherWarmDuration} seconds.",
                                   stopwatch.Elapsed.TotalSeconds);
        }
        private static void ListDocumentsImpl(JsonWriter jsonWriter,
                                              NuGetIndexSearcher searcher,
                                              Query query,
                                              string sortBy,
                                              int skip,
                                              int take,
                                              NuGetVersion semVerLevel)
        {
            Query boostedQuery = new DownloadsBoostedQuery(query,
                                                           searcher.DocIdMapping,
                                                           searcher.Downloads,
                                                           searcher.Rankings,
                                                           searcher.QueryBoostingContext);

            int  nDocs = skip + take;
            Sort sort  = GetSort(sortBy);

            TopDocs topDocs = (sort == null)
                ? searcher.Search(boostedQuery, nDocs)
                : searcher.Search(boostedQuery, null, nDocs, sort);

            ResponseFormatter.WriteV2Result(jsonWriter, searcher, topDocs, skip, take, semVerLevel);
        }
        private static void DocumentCountImpl(JsonWriter jsonWriter, IndexSearcher searcher, Query query)
        {
            TopDocs topDocs = searcher.Search(query, 1);

            ResponseFormatter.WriteV2CountResult(jsonWriter, topDocs.TotalHits);
        }