private void LoadExistingSuggesionsExtentions(string indexName, Index indexImplementation) { var suggestionsForIndex = Path.Combine(configuration.IndexStoragePath, "Raven-Suggestions", indexName); if (!Directory.Exists(suggestionsForIndex)) { return; } foreach (var directory in Directory.GetDirectories(suggestionsForIndex)) { IndexSearcher searcher; using (indexImplementation.GetSearcher(out searcher)) { var key = Path.GetFileName(directory); var decodedKey = MonoHttpUtility.UrlDecode(key); var lastIndexOfDash = decodedKey.LastIndexOf('-'); var accuracy = float.Parse(decodedKey.Substring(lastIndexOfDash + 1)); var lastIndexOfDistance = decodedKey.LastIndexOf('-', lastIndexOfDash - 1); StringDistanceTypes distanceType; Enum.TryParse(decodedKey.Substring(lastIndexOfDistance + 1, lastIndexOfDash - lastIndexOfDistance - 1), true, out distanceType); var field = decodedKey.Substring(0, lastIndexOfDistance); var extension = new SuggestionQueryIndexExtension( Path.Combine(configuration.IndexStoragePath, "Raven-Suggestions", indexName, key), searcher.IndexReader, SuggestionQueryRunner.GetStringDistance(distanceType), field, accuracy); indexImplementation.SetExtension(key, extension); } } }
private void InvokeSuggestionIndexing(string name, IndexDefinition definition, Index index) { foreach (var suggestion in definition.Suggestions) { var field = suggestion.Key; var suggestionOption = suggestion.Value; if (suggestionOption.Distance == StringDistanceTypes.None) { continue; } var indexExtensionKey = MonoHttpUtility.UrlEncode(field + "-" + suggestionOption.Distance + "-" + suggestionOption.Accuracy); var suggestionQueryIndexExtension = new SuggestionQueryIndexExtension( index, WorkContext, Path.Combine(Database.Configuration.IndexStoragePath, "Raven-Suggestions", name, indexExtensionKey), SuggestionQueryRunner.GetStringDistance(suggestionOption.Distance), Database.Configuration.RunInMemory, field, suggestionOption.Accuracy); Database.IndexStorage.SetIndexExtension(name, indexExtensionKey, suggestionQueryIndexExtension); } }