public void RebuildIndex(Action <string> statusMessageCallback) { var pageTree = ContentLoader().GetDescendents(ContentReference.StartPage).ToList(); var documents = new List <ElasticEpiDocument>(); var tasks = new List <Task>(); var indexedCounter = 0; var skippedCounter = 0; foreach (var contentReference in pageTree) { var task = Task.Run(() => { var content = ContentLoader().Get <IContent>(contentReference); if (!_contentValidator.ShouldBeIndexed(content) || !(content is ISearchablePage)) { skippedCounter++; //continue; return; } var inflated = InflateIndexableDocumentsForContent(content); if (inflated.Any()) { lock (documents) { documents.AddRange(inflated); } } indexedCounter++; statusMessageCallback( $"Parsing content... {GetProgress(indexedCounter + skippedCounter, pageTree.Count)} (Skipped: {skippedCounter})"); }); tasks.Add(task); } Task.WaitAll(tasks.ToArray()); IndexDocuments(documents, true, statusMessageCallback); UpdateClickCountOnDocuments(); statusMessageCallback("Finished rebuilding indexes."); ElasticEpiSearchTemplate <T> .Rebuild(); statusMessageCallback("Updated search template."); }
public ActionResult UpdateEngine() { try { ElasticEpiSearchTemplate <ElasticEpiDocument> .Rebuild(); ServiceLocator.Current.GetInstance <IElasticIndexer <ElasticEpiDocument> >().UpdateEditorSynonyms(); } catch (Exception) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } return(new HttpStatusCodeResult(HttpStatusCode.OK)); }