public AzureSearchReindexStatus ReIndex(string sessionId, int page) { var ids = GetIds(sessionId, string.Format("{0}.json", _config.IndexName)); var result = new AzureSearchReindexStatus { SessionId = sessionId, DocumentCount = ids.Length }; var idsToProcess = Page(ids, page); if (!idsToProcess.Any()) { result.DocumentsProcessed = ids.Length; result.Finished = true; return(result); } var documents = new List <Document>(); var config = GetConfiguration(); var allData = DataService.GettBatchData(idsToProcess); foreach (var data in allData) { if (data != null) { documents.Add(FromlDataset(data, config.SearchFields)); } } var indexStatus = IndexContentBatch(documents); result.DocumentsProcessed = page * BatchSize; if (indexStatus.Success) { return(result); } result.Error = true; result.Finished = true; result.Message = indexStatus.Message; return(result); }
public AzureSearchReindexStatus ReIndex(string filename, string sessionId, int page) { var ids = GetIds(sessionId, filename); var conversionErrors = false; var failedDocumentConversionIds = new List <int>(); var result = new AzureSearchReindexStatus { SessionId = sessionId, DocumentCount = ids.Length, Message = string.Empty }; var idsToProcess = Page(ids, page); if (!idsToProcess.Any()) { result.DocumentsProcessed = ids.Length; result.Finished = true; return(result); } var documents = new List <Document>(); var config = GetConfiguration(); if (filename == "content.json") { var contents = UmbracoContext.Current.Application.Services.ContentService.GetByIds(idsToProcess); foreach (var content in contents) { if (content != null) { try { documents.Add(FromUmbracoContent(content, config.SearchFields)); } catch (Exception ex) { conversionErrors = true; failedDocumentConversionIds.Add(content.Id); } } } } else if (filename == "media.json") { var contents = UmbracoContext.Current.Application.Services.MediaService.GetByIds(idsToProcess); foreach (var content in contents) { if (content != null) { try { documents.Add(FromUmbracoMedia(content, config.SearchFields)); } catch (Exception ex) { conversionErrors = true; failedDocumentConversionIds.Add(content.Id); } } } } else { var contents = new List <IMember>(); foreach (var id in idsToProcess) { contents.Add(UmbracoContext.Current.Application.Services.MemberService.GetById(id)); } foreach (var content in contents) { if (content != null) { try { documents.Add(FromUmbracoMember(content, config.SearchFields)); } catch (Exception ex) { conversionErrors = true; failedDocumentConversionIds.Add(content.Id); } } } } if (conversionErrors) { result.Message += $"Failed to convert Umbraco content to Azure search documents: {string.Join(", ", failedDocumentConversionIds)}\n"; } var indexStatus = IndexContentBatch(documents); result.DocumentsProcessed = page * BatchSize; if (indexStatus.Success) { return(result); } result.Error = true; result.Finished = true; result.Message += indexStatus.Message; return(result); }
public AzureSearchReindexStatus ReIndex(string filename, string sessionId, int page) { string logPrefix = $"ReIndex: Filename: {filename}. Session: {sessionId}. Page: {page}"; _logger.Debug(logPrefix); var ids = GetIds(sessionId, filename); var conversionErrors = false; var failedDocumentConversionIds = new List <int>(); var result = new AzureSearchReindexStatus { SessionId = sessionId, DocumentCount = ids.Length, Message = string.Empty }; var idsToProcess = Page(ids, page); if (!idsToProcess.Any()) { result.DocumentsProcessed = ids.Length; result.Finished = true; _logger.Debug($"{logPrefix}. Result: {JsonConvert.SerializeObject(result)}"); return(result); } _logger.Debug($"{logPrefix}. Processing {ids.Length} items."); var documents = new List <Document>(); var config = GetConfiguration(); if (filename == "content.json") { var contents = UmbracoContext.Current.Application.Services.ContentService.GetByIds(idsToProcess); foreach (var content in contents) { if (content != null) { try { Document document = FromUmbracoContent(content, config.SearchFields); if (document != null) { documents.Add(document); } } catch (Exception ex) { _logger.Warn($"{logPrefix}. Content {content.Id} conversion error: {ex}"); conversionErrors = true; failedDocumentConversionIds.Add(content.Id); } } } } else if (filename == "media.json") { var contents = UmbracoContext.Current.Application.Services.MediaService.GetByIds(idsToProcess); foreach (var content in contents) { if (content != null) { try { Document document = FromUmbracoMedia(content, config.SearchFields); if (document != null) { documents.Add(document); } } catch (Exception ex) { _logger.Warn($"{logPrefix}. Media {content.Id} conversion error: {ex}"); conversionErrors = true; failedDocumentConversionIds.Add(content.Id); } } } } else { var contents = new List <IMember>(); foreach (var id in idsToProcess) { contents.Add(UmbracoContext.Current.Application.Services.MemberService.GetById(id)); } foreach (var content in contents) { if (content != null) { try { Document document = FromUmbracoMember(content, config.SearchFields); if (document != null) { documents.Add(document); } } catch (Exception ex) { _logger.Warn($"{logPrefix}. Member {content.Id} conversion error: {ex}"); conversionErrors = true; failedDocumentConversionIds.Add(content.Id); } } } } if (conversionErrors) { result.Message += $"Failed to convert Umbraco content to Azure search documents: {string.Join(", ", failedDocumentConversionIds)}\n"; } var indexStatus = IndexContentBatch(documents); _logger.Debug($"{logPrefix}. AzureSearchIndexResult: {JsonConvert.SerializeObject(indexStatus)}"); result.DocumentsProcessed = page * ReindexBatchSize; if (indexStatus.Success) { _logger.Debug($"{logPrefix}. Result: {JsonConvert.SerializeObject(result)}"); return(result); } result.Error = true; result.Finished = true; result.Message += indexStatus.Message; _logger.Debug($"{logPrefix}. Result: {JsonConvert.SerializeObject(result)}"); return(result); }
public AzureSearchReindexStatus ReIndex(string filename, string sessionId, int page) { var ids = GetIds(sessionId, filename); var result = new AzureSearchReindexStatus { SessionId = sessionId, DocumentCount = ids.Length }; var idsToProcess = Page(ids, page); if (!idsToProcess.Any()) { result.DocumentsProcessed = ids.Length; result.Finished = true; return(result); } var documents = new List <Document>(); var config = GetConfiguration(); if (filename == "content.json") { var contents = UmbracoContext.Current.Application.Services.ContentService.GetByIds(idsToProcess); foreach (var content in contents) { if (content != null) { documents.Add(FromUmbracoContent(content, config.SearchFields)); } } } else if (filename == "media.json") { var contents = UmbracoContext.Current.Application.Services.MediaService.GetByIds(idsToProcess); foreach (var content in contents) { if (content != null) { documents.Add(FromUmbracoMedia(content, config.SearchFields)); } } } else { var contents = new List <IMember>(); foreach (var id in idsToProcess) { contents.Add(UmbracoContext.Current.Application.Services.MemberService.GetById(id)); } foreach (var content in contents) { if (content != null) { documents.Add(FromUmbracoMember(content, config.SearchFields)); } } } var indexStatus = IndexContentBatch(documents); result.DocumentsProcessed = page * BatchSize; if (indexStatus.Success) { return(result); } result.Error = true; result.Finished = true; result.Message = indexStatus.Message; return(result); }
public AzureSearchReindexStatus ReIndex(string filename, string sessionId, int page) { var ids = GetIds(sessionId, filename); var result = new AzureSearchReindexStatus { SessionId = sessionId }; if (filename == "content.json") { result.DocumentsQueued = GetQueuedItemCount(ids, page); } else if (filename == "media.json") { result.MediaQueued = GetQueuedItemCount(ids, page); } else if (filename == "members.json") { result.MembersQueued = GetQueuedItemCount(ids, page); } if (page > 0) { var idsToProcess = Page(ids, page); if (!idsToProcess.Any()) { result.Finished = true; return(result); } var documents = new List <Document>(); var config = GetConfiguration(); if (filename == "content.json") { var contents = UmbracoContext.Current.Application.Services.ContentService.GetByIds(idsToProcess); foreach (var content in contents) { if (content != null) { documents.Add(FromUmbracoContent(content, config.SearchFields)); } } } else if (filename == "media.json") { var contents = UmbracoContext.Current.Application.Services.MediaService.GetByIds(idsToProcess); foreach (var content in contents) { if (content != null) { documents.Add(FromUmbracoMedia(content, config.SearchFields)); } } } else if (filename == "members.json") { var contents = new List <IMember>(); foreach (var id in idsToProcess) { contents.Add(UmbracoContext.Current.Application.Services.MemberService.GetById(id)); } foreach (var content in contents) { if (content != null) { documents.Add(FromUmbracoMember(content, config.SearchFields)); } } } var indexStatus = IndexContentBatch(documents); if (!indexStatus.Success) { result.Error = true; } var totalPages = (int)Math.Ceiling((double)(ids.Length / BatchSize)) + 1; if (page == totalPages) { DeleteFile(sessionId, filename); result.Message = "Done"; } else { result.Message = $"Sent {filename.Replace(".json", "")} page {page + 1} of {totalPages} for indexing. {indexStatus.Message}"; } } return(result); }