/// <summary> /// Called when a scheduled job executes /// </summary> /// <returns>A status message to be stored in the database log and visible from admin mode</returns> public override string Execute() { var indexer = SearchFactory <SearchDocument> .ContentIndexer; if (indexer == null) { return("Indexer not configured"); } OnStatusChanged(string.Format("Starting Crawl at {0:hh mm ss tt}", DateTime.Now)); var configData = MissionConfig.GetConfigData(); var contentCrawler = new ContentCrawler <SearchDocument>(indexer, new CrawlerSettings() { PageScrapper = new PageScrapper(), ExcludedPages = TypeParser.ParseCSVIntList(configData.CrawlerPageExclusions), }); var results = contentCrawler.RunCrawler(StatusCallback, configData.LastContentCrawledDate); MissionConfig.SetLastContentCrawlDate(configData, DateTime.Now, results.Duration); OnStatusChanged("Done"); return(string.Format("Crawl Finished. {0} pages crawled. Total Errors {4}. Duration ({1:00}:{2:00}:{3:00}) ", results.TotalCnt, results.Duration.Hours, results.Duration.Minutes, results.Duration.Seconds, results.ErrorCnt)); }
/// <summary> /// /// </summary> /// <param name="e"></param> private void PublishToIndex(ContentEventArgs e) { var configData = MissionConfig.GetConfigData(); if (configData.IndexOnPublishContent && e.Content.GetType().IsSubclassOf(typeof(BlockData))) { var repository = ServiceLocator.Current.GetInstance <IContentRepository>(); var pages = repository.GetReferencesToContent(e.Content.ContentLink, false); if (pages == null) { return; } var contentCrawler = new ContentCrawler <SearchDocument>(new CrawlerSettings()); foreach (var pageRef in pages) { var page = repository.Get <IContent>(pageRef.OwnerID); if (page != null) { var pageData = page as PageData; if (pageData != null) { var searchableContent = contentCrawler.BuildSearchablePage(pageData); if (searchableContent != null) { SearchFactory <SearchDocument> .ContentIndexer.Update(searchableContent); } } } } } else if (configData.IndexOnPublishAsset && e.Content is ISearchableAsset) { var mediaData = e.Content as MediaData; var crawler = new AssetCrawler <SearchDocument>(); var searchableContent = crawler.BuildSearchableAsset(mediaData); if (searchableContent != null) { SearchFactory <SearchDocument> .AssetIndexer.Update(searchableContent); } } else if (configData.IndexOnPublishContent && e.Content is ISearchableContent) { var pageData = e.Content as PageData; var contentCrawler = new ContentCrawler <SearchDocument>(new CrawlerSettings()); var searchableContent = contentCrawler.BuildSearchablePage(pageData); if (searchableContent == null) { return; } // if moving item then use target link instead of parent link if (e.TargetLink != null && e.TargetLink.ID != 0) { var pageCrawlMetadata = searchableContent as ContentCrawlProxy; if (pageCrawlMetadata != null) { pageCrawlMetadata.Content.Add(new CrawlerContent() { Name = "parent", Value = EpiHelper.GetParentName(e.TargetLink.ToPageReference()), }); pageCrawlMetadata.Content.Add(new CrawlerContent() { Name = "path", Value = EpiHelper.GetPageTreePath(e.TargetLink.ToPageReference()), }); pageCrawlMetadata.Content.Add(new CrawlerContent() { Name = "paths", Value = EpiHelper.GetPageTreePaths(e.TargetLink.ToPageReference()), }); pageCrawlMetadata.Content.Add(new CrawlerContent() { Name = "folder", Value = EpiHelper.GetParentName(e.TargetLink.ToPageReference()), }); } } SearchFactory <SearchDocument> .ContentIndexer.Update(searchableContent); } }