예제 #1
0
 public SearchController(
     IAuthorizationService authorizationService,
     ISiteService siteService,
     LuceneIndexManager luceneIndexProvider,
     LuceneIndexingService luceneIndexingService,
     LuceneIndexSettingsService luceneIndexSettingsService,
     LuceneAnalyzerManager luceneAnalyzerManager,
     ISearchQueryService searchQueryService,
     ISession session,
     IEnumerable <IPermissionProvider> permissionProviders,
     IShapeFactory shapeFactory,
     ILogger <SearchController> logger
     )
 {
     _authorizationService       = authorizationService;
     _siteService                = siteService;
     _luceneIndexProvider        = luceneIndexProvider;
     _luceneIndexingService      = luceneIndexingService;
     _luceneIndexSettingsService = luceneIndexSettingsService;
     _luceneAnalyzerManager      = luceneAnalyzerManager;
     _searchQueryService         = searchQueryService;
     _session             = session;
     _permissionProviders = permissionProviders;
     New     = shapeFactory;
     _logger = logger;
 }
예제 #2
0
        private IList <Package> IndexAndSearch(IEnumerable <Package> packages, string searchTerm, string semVerLevel, string packageType = "")
        {
            Directory d = new RAMDirectory();

            var mockPackageSource = new Mock <IEntityRepository <Package> >();

            mockPackageSource
            .Setup(m => m.GetAll())
            .Returns(packages.AsQueryable());

            var luceneIndexingService = new LuceneIndexingService(
                mockPackageSource.Object,
                d,
                null,
                null,
                new LuceneDocumentFactory(Mock.Of <IIconUrlProvider>()));

            luceneIndexingService.UpdateIndex(forceRefresh: true);

            var luceneSearchService = new LuceneSearchService(d);
            var searchFilter        = new SearchFilter("Test")
            {
                Skip        = 0,
                Take        = 10,
                SearchTerm  = searchTerm,
                SemVerLevel = semVerLevel,
                PackageType = packageType
            };

            var results = luceneSearchService.Search(searchFilter).Result.Data.ToList();

            return(results);
        }
예제 #3
0
 public LuceneIndexStep(
     LuceneIndexingService luceneIndexingService,
     LuceneIndexManager luceneIndexManager
     )
 {
     _luceneIndexManager    = luceneIndexManager;
     _luceneIndexingService = luceneIndexingService;
 }
예제 #4
0
        public void CamelCaseTokenizer(string term, IEnumerable <string> tokens)
        {
            // Act
            var result = LuceneIndexingService.TokenizeId(term);

            // Assert
            Assert.Equal(tokens.OrderBy(p => p), result.OrderBy(p => p));
        }
예제 #5
0
 public SearchController(
     ISiteService siteService,
     LuceneIndexProvider luceneIndexProvider,
     LuceneIndexingService luceneIndexingService,
     LuceneSettings luceneSettings,
     IContentManager contentManager
     )
 {
     _siteService           = siteService;
     _luceneIndexProvider   = luceneIndexProvider;
     _luceneIndexingService = luceneIndexingService;
     _luceneSettings        = luceneSettings;
     _contentManager        = contentManager;
 }
예제 #6
0
        public SearchController(
            ISiteService siteService,
            LuceneIndexManager luceneIndexProvider,
            LuceneIndexingService luceneIndexingService,
            IContentManager contentManager,
            ILogger <SearchController> logger
            )
        {
            _siteService           = siteService;
            _luceneIndexProvider   = luceneIndexProvider;
            _luceneIndexingService = luceneIndexingService;
            _contentManager        = contentManager;

            Logger = logger;
        }
예제 #7
0
 public AdminController(
     LuceneIndexProvider luceneIndexProvider,
     LuceneIndexingService luceneIndexingService,
     IAuthorizationService authorizationService,
     INotifier notifier,
     IStringLocalizer <AdminController> s,
     IHtmlLocalizer <AdminController> h,
     ILogger <AdminController> logger)
 {
     _luceneIndexProvider   = luceneIndexProvider;
     _luceneIndexingService = luceneIndexingService;
     _authorizationService  = authorizationService;
     _notifier = notifier;
     S         = s;
     H         = h;
     Logger    = logger;
 }
예제 #8
0
        public SearchController(
            IAuthorizationService authorizationService,
            ISiteService siteService,
            LuceneIndexManager luceneIndexProvider,
            LuceneIndexingService luceneIndexingService,
            ISearchQueryService searchQueryService,
            IContentManager contentManager,
            ILogger <SearchController> logger
            )
        {
            _authorizationService  = authorizationService;
            _siteService           = siteService;
            _luceneIndexProvider   = luceneIndexProvider;
            _luceneIndexingService = luceneIndexingService;
            _searchQueryService    = searchQueryService;
            _contentManager        = contentManager;

            Logger = logger;
        }
예제 #9
0
        private IList <Package> IndexAndSearch(Mock <IPackageSource> packageSource, string searchTerm)
        {
            Directory d = new RAMDirectory();
            var       luceneIndexingService = new LuceneIndexingService(packageSource.Object, d);

            luceneIndexingService.UpdateIndex(forceRefresh: true);

            var luceneSearchService = new LuceneSearchService(d);
            var searchFilter        = new SearchFilter
            {
                Skip       = 0,
                Take       = 10,
                SearchTerm = searchTerm,
            };

            int totalHits;
            var results = luceneSearchService.Search(searchFilter, out totalHits).ToList();

            return(results);
        }
예제 #10
0
        public AdminController(
            LuceneIndexManager luceneIndexManager,
            LuceneIndexingService luceneIndexingService,
            IAuthorizationService authorizationService,
            LuceneAnalyzerManager luceneAnalyzerManager,
            ILuceneQueryService queryService,
            INotifier notifier,
            IStringLocalizer <AdminController> s,
            IHtmlLocalizer <AdminController> h,
            ILogger <AdminController> logger)
        {
            _luceneIndexManager    = luceneIndexManager;
            _luceneIndexingService = luceneIndexingService;
            _authorizationService  = authorizationService;
            _luceneAnalyzerManager = luceneAnalyzerManager;
            _queryService          = queryService;

            _notifier = notifier;
            S         = s;
            H         = h;
            Logger    = logger;
        }
예제 #11
0
        public AdminController(
            ISession session,
            IContentManager contentManager,
            IContentDefinitionManager contentDefinitionManager,
            LuceneIndexManager luceneIndexManager,
            LuceneIndexingService luceneIndexingService,
            IAuthorizationService authorizationService,
            LuceneAnalyzerManager luceneAnalyzerManager,
            LuceneIndexSettingsService luceneIndexSettingsService,
            ILuceneQueryService queryService,
            ILiquidTemplateManager liquidTemplateManager,
            INotifier notifier,
            ISiteService siteService,
            IShapeFactory shapeFactory,
            JavaScriptEncoder javaScriptEncoder,
            IStringLocalizer <AdminController> stringLocalizer,
            IHtmlLocalizer <AdminController> htmlLocalizer,
            ILogger <AdminController> logger
            )
        {
            _session                    = session;
            _contentManager             = contentManager;
            _luceneIndexManager         = luceneIndexManager;
            _luceneIndexingService      = luceneIndexingService;
            _authorizationService       = authorizationService;
            _luceneAnalyzerManager      = luceneAnalyzerManager;
            _luceneIndexSettingsService = luceneIndexSettingsService;
            _queryService               = queryService;
            _liquidTemplateManager      = liquidTemplateManager;
            _contentDefinitionManager   = contentDefinitionManager;
            _notifier                   = notifier;
            _siteService                = siteService;

            New = shapeFactory;
            _javaScriptEncoder = javaScriptEncoder;
            S       = stringLocalizer;
            H       = htmlLocalizer;
            _logger = logger;
        }
예제 #12
0
        private IList <Package> IndexAndSearch(IEnumerable <Package> packages, string searchTerm, string semVerLevel)
        {
            Directory d = new RAMDirectory();

            var mockPackageSource = new Mock <IEntityRepository <Package> >();

            mockPackageSource
            .Setup(m => m.GetAll())
            .Returns(packages.AsQueryable());

            var mockCuratedPackageSource = new Mock <IEntityRepository <CuratedPackage> >();

            mockCuratedPackageSource
            .Setup(m => m.GetAll())
            .Returns(Enumerable.Empty <CuratedPackage>().AsQueryable());

            var luceneIndexingService = new LuceneIndexingService(
                mockPackageSource.Object,
                mockCuratedPackageSource.Object,
                d,
                null,
                null);

            luceneIndexingService.UpdateIndex(forceRefresh: true);

            var luceneSearchService = new LuceneSearchService(d);
            var searchFilter        = new SearchFilter("Test")
            {
                Skip        = 0,
                Take        = 10,
                SearchTerm  = searchTerm,
                SemVerLevel = semVerLevel
            };

            var results = luceneSearchService.Search(searchFilter).Result.Data.ToList();

            return(results);
        }
예제 #13
0
        static void Main(string[] args)
        {
            var            packageDataJson = File.ReadAllText(@"samplePackageData.json");
            var            asArray         = JArray.Parse(packageDataJson);
            List <Package> packages        = LoadPackages(asArray);

            Lucene.Net.Store.Directory d = new Lucene.Net.Store.RAMDirectory();
            var packageSource            = new Mock <IPackageSource>();

            packageSource
            .Setup(ps => ps.GetPackagesForIndexing(It.IsAny <DateTime?>()))
            .Returns(new PackageIndexEntity[0].AsQueryable());

            var luceneIndexingService = new LuceneIndexingService(packageSource.Object, d);

            luceneIndexingService.UpdateIndex(forceRefresh: true);
            luceneIndexingService.AddPackages(packages.Select(p => new PackageIndexEntity(p)).ToList(), true);
            luceneSearchService = new LuceneSearchService(d);

            TestSearch("jQuery", "jQuery", 1);
            TestSearch("jqueryui", "jQuery.UI.Combined", 4);

            TestSearch("EntityFramework", "EntityFramework", 1);
            TestSearch("Entity Framework", "EntityFramework", 1);
            TestSearch("entity", "EntityFramework", 1);
            //TestSearch("EF", "EntityFramework", 10); //Currently it's not high in the results AT ALL. Should it be?

            TestSearch("Windows.Azure.Storage", "WindowsAzure.Storage", 1);
            TestSearch("Windows Azure Storage", "WindowsAzure.Storage", 1);
            TestSearch("Azure Storage", "WindowsAzure.Storage", 1);

            TestSearch("Windows.Azure.Caching", "Microsoft.WindowsAzure.Caching", 1);
            TestSearch("Windows Azure Caching", "Microsoft.WindowsAzure.Caching", 1);
            TestSearch("Azure Caching", "Microsoft.WindowsAzure.Caching", 1);
            TestSearch("Azure Cache", "Microsoft.WindowsAzure.Caching", 1);
            TestSearch("Windows Azure Cache", "Microsoft.WindowsAzure.Caching", 1);

            // These 3 popular 'service bus' packages are all in top 5 at time of building this corpus
            // Actually NServiceBus has the most downloads, but is lowest ranked for some reason, well, that might change some day.
            TestSearch("NServiceBus", "NServiceBus", 5);
            TestSearch("Rhino.ServiceBus", "Rhino.ServiceBus", 5);
            TestSearch("ServiceBus", "WindowsAzure.ServiceBus", 5);

            // By FAR the most popular json package
            TestSearch("json", "NewtonSoft.Json", 1);
            TestSearch("Json.net", "NewtonSoft.Json", 1);
            TestSearch("Newtonsoft", "NewtonSoft.Json", 1);

            // A popular json javascript package
            TestSearch("json javascript", "json2", 1);
            TestSearch("json js", "json2", 1);

            // Some other results with justifiably good relevance for json include the 'json' package, and ServiceStack.Text
            TestSearch("json", "json", 10);
            TestSearch("json", "ServiceStack.Text", 10);

            TestSearch("Microsoft web api", "Microsoft.AspNet.WebApi", 3);

            TestSearch("microsoft http", "Microsoft.AspNet.WebApi", 4);
            TestSearch("microsoft http", "Microsoft.AspNet.WebApi.WebHost", 4);
            TestSearch("microsoft http", "Microsoft.Net.Http", 4);
            TestSearch("microsoft http", "Microsoft.Web.Infrastructure", 4);

            // Finding some misc packages by their distinctive ids
            TestSearch("Hammock", "Hammock", 1);
            TestSearch("WebActivator", "WebActivatorEx", 1);
            TestSearch("Modernizr", "Modernizr", 1);
            TestSearch("SimpleInjector", "SimpleInjector", 1);
            TestSearch("Simple Injector", "SimpleInjector", 1);

            // Some more general term looking searches
            TestSearch("Asp.net Mvc", "Microsoft.AspNet.Mvc", 2); //unbelievably it's losing to elmah...
            TestSearch("asp.net web pages", "Microsoft.AspNet.WebPages", 1);
            TestSearch("logging", "Elmah", 1);
            TestSearch("search", "Lucene.Net", 1);
            TestSearch("lucene", "Lucene.Net", 1);
            TestSearch("search", "NHibernate.Search", 20);
            TestSearch("hibernate", "NHibernate", 1);
            TestSearch("hibernate", "FluentNHibernate", 2);
            TestSearch("hibernate profiler", "NHibernateProfiler", 4);
            TestSearch("sql profiler", "MiniProfiler", 1);
            TestSearch("sql profiler", "LinqToSqlProfiler", 5);
            TestSearch("haacked", "RouteMagic", 2);
            TestSearch("haacked", "MVcHaack.Ajax", 4);
            TestSearch("haacked", "WebBackgrounder", 5);
            TestSearch("haacked", "routedebugger", 5);

            TestSearch("NuGet", "NuGet.Core", 3);
            TestSearch("NuGet", "NuGet.CommandLine", 2);
            TestSearch("NuGet", "NuGet.Build", 3);

            TestSearch("Mock", "RhinoMocks", 4);
            TestSearch("Mock", "NUnit.Mocks", 4);
            TestSearch("Mock", "Moq", 4);
            TestSearch("Mock", "FakeItEasy", 20);
            TestSearch("Mock", "Ninject.MockingKernel", 30);
            TestSearch("Mock", "AutoWrockTestable", 30);
            TestSearch("Mock", "Nukito", 40);
            TestSearch("Mock", "MockJockey", 50);
            TestSearch("Mock", "Machine.Specifications.AutoMocking", 50);
            TestSearch("Mock", "WP-Fx.EasyMoq", 60);

            TestSearch("razor", "Microsoft.AspNet.Razor", 1);
            TestSearch("razor 2", "Microsoft.AspNet.Razor", 1);
            TestSearch("memes", "FourOne.Memes", 1);
            TestSearch("ninject", "Ninject", 1);
            TestSearch("nunit", "NUnit", 1);
            TestSearch("testing", "NUnit", 1);
            TestSearch("testing", "xunit", 30); //It should probably be higher
            TestSearch("Asp.net MVC scaffolding", "MvcScaffolding", 3);
            TestSearch("Asp.net MVC scaffolding", "NLibScaffolding", 90);
            TestSearch("Asp.net MVC scaffolding", "WijmoMvcScaffolding", 120);
            TestSearch("Asp.net MVC scaffolding", "MvcScaffolding.Obsidian", 130);
            TestSearch("mvc scaffold", "MvcScaffolding", 8);
            TestSearch("mvc scaffold", "ModelScaffolding", 20);
            TestSearch("Microsoft web infrastructure", "Microsoft.Web.Infrastructure", 1);
            TestSearch("Dotnetopenauth", "DotNetOpenAuth", 1);
            TestSearch("OpenID", "DotNetOpenAuth.OpenId.Core", 1);
            TestSearch("image resizer", "ImageResizer", 1);
            TestSearch("parsing", "CommandLineParser", 10);
            TestSearch("knockoutjs", "knockoutjs", 1);
            TestSearch("knockout js", "knockoutjs", 3); //it should probably be higher, i.e. beating json.net
            // TestSearch("knockout.js", "knockoutjs", 1); // fails to find it
            TestSearch("helpers", "microsoft-web-helpers", 1);
            TestSearch("fluent mongo", "FluentMongo", 1);
            TestSearch("fluent mongo", "MongoFluentUpdater", 15);
            TestSearch("mongo", "mongocsharpdriver", 1);
            TestSearch("mongo", "FluentMongo", 2);
            TestSearch("mongo elmah", "elmah.mongodb", 15); //should be higher?

            // These guys are by far the most popular DI packages
            TestSearch("injection", "Unity", 2);
            TestSearch("injection", "Ninject", 2);
            TestSearch("dependency injection", "Unity", 2);
            TestSearch("dependency injection", "Ninject", 2);
        }
 public LuceneSettingsDeploymentSource(LuceneIndexingService luceneIndexingService, ISiteService siteService)
 {
     _luceneIndexingService = luceneIndexingService;
     _siteService           = siteService;
 }
        private IList<Package> IndexAndSearch(IEnumerable<Package> packages, string searchTerm)
        {
            Directory d = new RAMDirectory();

            var mockPackageSource = new Mock<IEntityRepository<Package>>();
            mockPackageSource
                .Setup(m => m.GetAll())
                .Returns(packages.AsQueryable());

            var mockCuratedPackageSource = new Mock<IEntityRepository<CuratedPackage>>();
            mockCuratedPackageSource
                .Setup(m => m.GetAll())
                .Returns(Enumerable.Empty<CuratedPackage>().AsQueryable());

            var luceneIndexingService = new LuceneIndexingService(
                mockPackageSource.Object,
                mockCuratedPackageSource.Object,
                d,
                null);
            luceneIndexingService.UpdateIndex(forceRefresh: true);

            var luceneSearchService = new LuceneSearchService(d);
            var searchFilter = new SearchFilter
            {
                Skip = 0,
                Take = 10,
                SearchTerm = searchTerm,
            };

            int totalHits;
            var results = luceneSearchService.Search(searchFilter, out totalHits).ToList();

            return results;
        }
        private IList<Package> IndexAndSearch(Mock<IPackageSource> packageSource, string searchTerm)
        {
            Directory d = new RAMDirectory();
            var luceneIndexingService = new LuceneIndexingService(packageSource.Object, d);
            luceneIndexingService.UpdateIndex(forceRefresh: true);

            var luceneSearchService = new LuceneSearchService(d);
            int totalHits = 0;
            var searchFilter = new SearchFilter
            {
                Skip = 0,
                Take = 10,
                SearchTerm = searchTerm,
            };

            var results = luceneSearchService.Search(
                packageSource.Object.GetPackagesForIndexing(null),
                searchFilter,
                out totalHits).ToList();

            return results;
        }