private void SaveBackup(string languageId, string index, string[] synonymPairs) { var name = GetFilename(languageId, index); SynonymBackupFile contentFile = GetBackup(name); //TODO: Don't create new version for identical files. contentFile = contentFile == null ? _contentRepository.GetDefault <SynonymBackupFile>(GetBackupFolder().ContentLink) : contentFile.CreateWritableClone() as SynonymBackupFile; var content = String.Join("|", synonymPairs); var blob = _blobFactory.CreateBlob(contentFile.BinaryDataContainer, ".synonyms"); using (var stream = blob.OpenWrite()) { var writer = new StreamWriter(stream); writer.Write(content); writer.Flush(); } contentFile.Name = name; contentFile.BinaryData = blob; _contentRepository.Save(contentFile, SaveAction.Publish, AccessLevel.NoAccess); if (_logger.IsDebugEnabled()) { _logger.Debug("SaveBackup -> Name: " + contentFile.Name); _logger.Debug("SaveBackup -> RouteSegment: " + contentFile.RouteSegment); _logger.Debug("SaveBackup -> MimeType: " + contentFile.MimeType); _logger.Debug("SaveBackup -> ContentLink: " + contentFile.ContentLink); _logger.Debug("SaveBackup -> Status: " + contentFile.Status); } }
private SynonymBackupFile GetBackup(string name) { ContentReference backupFolder = GetBackupFolder().ContentLink; SynonymBackupFile backupFile = _contentRepository .GetChildren <SynonymBackupFile>(backupFolder) .FirstOrDefault(s => s.Name.Equals(name, StringComparison.OrdinalIgnoreCase)); if (backupFile == null) { return(null); } if (backupFile.BinaryData is FileBlob fileBlob && !File.Exists(fileBlob.FilePath)) { return(null); } return(backupFile); }
public List <Synonym> GetSynonyms(string languageId, string index) { var synonyms = new List <Synonym>(); if (String.IsNullOrWhiteSpace(index)) { index = _settings.GetDefaultIndexName(languageId); } var indexing = new Indexing(_serverInfoService, _settings, _httpClientHelper); if (!indexing.IndexExists(index)) { return(synonyms); } var json = _httpClientHelper.GetString(indexing.GetUri(index, "_settings")); var jpath = $"{index}.settings.index.analysis.filter.{Language.GetLanguageAnalyzer(languageId)}_synonym_filter.synonyms"; JContainer settings = JsonConvert.DeserializeObject <JContainer>(json); JToken synonymPairs = settings.SelectToken(jpath); string[] parsedSynonyms; if (synonymPairs?.Any(s => s.ToString() != "example_from,example_to") == true) { parsedSynonyms = synonymPairs.Select(s => s.ToString()).ToArray(); } else { SynonymBackupFile backup = GetBackup(GetFilename(languageId, index)); if (backup?.BinaryData == null) { return(synonyms); } using (var stream = backup.BinaryData.OpenRead()) { using (var reader = new StreamReader(stream)) { string data = reader.ReadToEnd(); _logger.Debug("Synonym data: " + data); parsedSynonyms = data.Split('|'); } } } foreach (string synonym in parsedSynonyms) { if (String.IsNullOrWhiteSpace(synonym)) { continue; } var arrowPos = synonym.IndexOf("=>"); var firstCommaPos = synonym.IndexOf(','); var isMultiword = arrowPos > firstCommaPos; var splitToken = new[] { isMultiword ? "=>" : "," }; _logger.Debug("Synonym: " + synonym); var pair = synonym.Split(splitToken, StringSplitOptions.None); if (pair.Length > 1) { synonyms.Add(new Synonym { From = pair[0], To = pair[1], TwoWay = !isMultiword && !pair[0].Contains("=>"), MultiWord = isMultiword }); } } return(synonyms); }