public SuggestionQueryResult ExecuteSuggestionQuery(string indexName, SuggestionQuery suggestionQuery) { if (suggestionQuery == null) { throw new ArgumentNullException("suggestionQuery"); } if (string.IsNullOrWhiteSpace(suggestionQuery.Term)) { throw new ArgumentNullException("suggestionQuery.Term"); } if (string.IsNullOrWhiteSpace(indexName)) { throw new ArgumentNullException("indexName"); } if (string.IsNullOrWhiteSpace(suggestionQuery.Field)) { throw new ArgumentNullException("suggestionQuery.Field"); } if (suggestionQuery.MaxSuggestions <= 0) { suggestionQuery.MaxSuggestions = 10; } if (suggestionQuery.Accuracy <= 0 || suggestionQuery.Accuracy > 1) { suggestionQuery.Accuracy = 0.5f; } suggestionQuery.MaxSuggestions = Math.Min(suggestionQuery.MaxSuggestions, _database.Configuration.MaxPageSize); var indexExtensionKey = MonoHttpUtility.UrlEncode(suggestionQuery.Field + "-" + suggestionQuery.Distance + "-" + suggestionQuery.Accuracy); var indexExtension = _database.IndexStorage.GetIndexExtension(indexName, indexExtensionKey) as SuggestionQueryIndexExtension; IndexSearcher currentSearcher; using (_database.IndexStorage.GetCurrentIndexSearcher(indexName, out currentSearcher)) { var indexReader = currentSearcher.IndexReader; if (indexExtension != null) { return(indexExtension.Query(suggestionQuery, indexReader)); } var suggestionQueryIndexExtension = new SuggestionQueryIndexExtension( Path.Combine(_database.Configuration.IndexStoragePath, "Raven-Suggestions", indexName, indexExtensionKey), indexReader, GetStringDistance(suggestionQuery.Distance), suggestionQuery.Field, suggestionQuery.Accuracy); suggestionQueryIndexExtension.Init(indexReader); _database.IndexStorage.SetIndexExtension(indexName, indexExtensionKey, suggestionQueryIndexExtension); return(suggestionQueryIndexExtension.Query(suggestionQuery, indexReader)); } }
public SuggestionQueryResult ExecuteSuggestionQuery(string indexName, SuggestionQuery suggestionQuery) { if (suggestionQuery == null) throw new ArgumentNullException("suggestionQuery"); if (string.IsNullOrWhiteSpace(suggestionQuery.Term)) throw new ArgumentNullException("suggestionQuery.Term"); if (string.IsNullOrWhiteSpace(indexName)) throw new ArgumentNullException("indexName"); if (string.IsNullOrWhiteSpace(suggestionQuery.Field)) throw new ArgumentNullException("suggestionQuery.Field"); if (suggestionQuery.MaxSuggestions <= 0) suggestionQuery.MaxSuggestions = 10; if (suggestionQuery.Accuracy <= 0 || suggestionQuery.Accuracy > 1) suggestionQuery.Accuracy = 0.5f; suggestionQuery.MaxSuggestions = Math.Min(suggestionQuery.MaxSuggestions, _database.Configuration.MaxPageSize); var indexExtensionKey = suggestionQuery.Field + "/" + suggestionQuery.Distance + "/" + suggestionQuery.Accuracy; var indexExtension = _database.IndexStorage.GetIndexExtension(indexName, indexExtensionKey) as SuggestionQueryIndexExtension; if (indexExtension != null) return indexExtension.Query(suggestionQuery); IndexSearcher currentSearcher; using(_database.IndexStorage.GetCurrentIndexSearcher(indexName,out currentSearcher)) { var indexReader = currentSearcher.GetIndexReader(); var suggestionQueryIndexExtension = new SuggestionQueryIndexExtension(GetStringDistance(suggestionQuery), suggestionQuery.Field, suggestionQuery.Accuracy); suggestionQueryIndexExtension.Init(indexReader); _database.IndexStorage.SetIndexExtension(indexName, indexExtensionKey, suggestionQueryIndexExtension); return suggestionQueryIndexExtension.Query(suggestionQuery); } }
public SuggestionQueryResult ExecuteSuggestionQuery(string indexName, SuggestionQuery suggestionQuery) { if (suggestionQuery == null) { throw new ArgumentNullException("suggestionQuery"); } if (string.IsNullOrWhiteSpace(suggestionQuery.Term)) { throw new ArgumentNullException("suggestionQuery.Term"); } if (string.IsNullOrWhiteSpace(indexName)) { throw new ArgumentNullException("indexName"); } if (string.IsNullOrWhiteSpace(suggestionQuery.Field)) { throw new ArgumentNullException("suggestionQuery.Field"); } if (suggestionQuery.MaxSuggestions <= 0) { suggestionQuery.MaxSuggestions = 10; } if (suggestionQuery.Accuracy <= 0 || suggestionQuery.Accuracy > 1) { suggestionQuery.Accuracy = 0.5f; } suggestionQuery.MaxSuggestions = Math.Min(suggestionQuery.MaxSuggestions, _database.Configuration.MaxPageSize); var indexExtensionKey = suggestionQuery.Field + "/" + suggestionQuery.Distance + "/" + suggestionQuery.Accuracy; var indexExtension = _database.IndexStorage.GetIndexExtension(indexName, indexExtensionKey) as SuggestionQueryIndexExtension; if (indexExtension != null) { return(indexExtension.Query(suggestionQuery)); } var currentSearcher = _database.IndexStorage.GetCurrentIndexSearcher(indexName); try { var indexReader = currentSearcher.GetIndexReader(); var suggestionQueryIndexExtension = new SuggestionQueryIndexExtension(GetStringDistance(suggestionQuery), suggestionQuery.Field, suggestionQuery.Accuracy); suggestionQueryIndexExtension.Init(indexReader); _database.IndexStorage.SetIndexExtension(indexName, indexExtensionKey, suggestionQueryIndexExtension); return(suggestionQueryIndexExtension.Query(suggestionQuery)); } finally { currentSearcher.GetIndexReader().DecRef(); } }
public SuggestionQueryResult ExecuteSuggestionQuery(string indexName, SuggestionQuery suggestionQuery) { if (suggestionQuery == null) throw new ArgumentNullException("suggestionQuery"); if (string.IsNullOrWhiteSpace(suggestionQuery.Term)) throw new ArgumentNullException("suggestionQuery.Term"); if (string.IsNullOrWhiteSpace(indexName)) throw new ArgumentNullException("indexName"); if (string.IsNullOrWhiteSpace(suggestionQuery.Field)) throw new ArgumentNullException("suggestionQuery.Field"); suggestionQuery.MaxSuggestions = Math.Min(suggestionQuery.MaxSuggestions, database.Configuration.MaxPageSize); if (suggestionQuery.MaxSuggestions <= 0) suggestionQuery.MaxSuggestions = SuggestionQuery.DefaultMaxSuggestions; if (suggestionQuery.Accuracy.HasValue && (suggestionQuery.Accuracy.Value <= 0f || suggestionQuery.Accuracy.Value > 1f)) suggestionQuery.Accuracy = SuggestionQuery.DefaultAccuracy; if (suggestionQuery.Accuracy.HasValue == false) suggestionQuery.Accuracy = SuggestionQuery.DefaultAccuracy; if (suggestionQuery.Distance.HasValue == false) suggestionQuery.Distance = StringDistanceTypes.Default; var definition = database.IndexDefinitionStorage.GetIndexDefinition(indexName); var indexExtensionKey = MonoHttpUtility.UrlEncode(suggestionQuery.Field + "-" + suggestionQuery.Distance + "-" + suggestionQuery.Accuracy); var indexExtension = database.IndexStorage.GetIndexExtensionByPrefix(indexName, indexExtensionKey) as SuggestionQueryIndexExtension; IndexSearcher currentSearcher; using (database.IndexStorage.GetCurrentIndexSearcher(definition.IndexId, out currentSearcher)) { if (currentSearcher == null) { throw new InvalidOperationException("Could not find current searcher"); } var indexReader = currentSearcher.IndexReader; if (indexExtension != null) return indexExtension.Query(suggestionQuery, indexReader); var suggestionQueryIndexExtension = new SuggestionQueryIndexExtension( database.WorkContext, Path.Combine(database.Configuration.IndexStoragePath, "Raven-Suggestions", indexName, indexExtensionKey), GetStringDistance(suggestionQuery.Distance ?? StringDistanceTypes.Default), indexReader.Directory() is RAMDirectory, suggestionQuery.Field, suggestionQuery.Accuracy ?? 0.5f); database.IndexStorage.SetIndexExtension(indexName, indexExtensionKey, suggestionQueryIndexExtension); long _; var task = Task.Factory.StartNew(() => suggestionQueryIndexExtension.Init(indexReader)); database.Tasks.AddTask(task, new object(), out _); // wait for a bit for the suggestions to complete, but not too much (avoid IIS resets) task.Wait(15000, database.WorkContext.CancellationToken); return suggestionQueryIndexExtension.Query(suggestionQuery, indexReader); } }
public SuggestionQueryResult ExecuteSuggestionQuery(string indexName, SuggestionQuery suggestionQuery) { if (suggestionQuery == null) throw new ArgumentNullException("suggestionQuery"); if (string.IsNullOrWhiteSpace(suggestionQuery.Term)) throw new ArgumentNullException("suggestionQuery.Term"); if (string.IsNullOrWhiteSpace(indexName)) throw new ArgumentNullException("indexName"); if (string.IsNullOrWhiteSpace(suggestionQuery.Field)) throw new ArgumentNullException("suggestionQuery.Field"); if (suggestionQuery.MaxSuggestions <= 0) suggestionQuery.MaxSuggestions = 10; if (suggestionQuery.Accuracy <= 0 || suggestionQuery.Accuracy > 1) suggestionQuery.Accuracy = 0.5f; suggestionQuery.MaxSuggestions = Math.Min(suggestionQuery.MaxSuggestions, database.Configuration.MaxPageSize); var indexExtensionKey = MonoHttpUtility.UrlEncode(suggestionQuery.Field + "-" + suggestionQuery.Distance + "-" + suggestionQuery.Accuracy); var indexExtension = database.IndexStorage.GetIndexExtension(indexName, indexExtensionKey) as SuggestionQueryIndexExtension; IndexSearcher currentSearcher; using (database.IndexStorage.GetCurrentIndexSearcher(indexName, out currentSearcher)) { if (currentSearcher == null) { throw new InvalidOperationException("Could not find current searcher"); } var indexReader = currentSearcher.IndexReader; if (indexExtension != null) return indexExtension.Query(suggestionQuery, indexReader); var suggestionQueryIndexExtension = new SuggestionQueryIndexExtension( database, Path.Combine(database.Configuration.IndexStoragePath, "Raven-Suggestions", indexName, indexExtensionKey), indexReader, GetStringDistance(suggestionQuery.Distance), suggestionQuery.Field, suggestionQuery.Accuracy); database.IndexStorage.SetIndexExtension(indexName, indexExtensionKey, suggestionQueryIndexExtension); long _; var task = Task.Factory.StartNew(() => suggestionQueryIndexExtension.Init(indexReader)); database.AddTask(task, new RavenJObject(), out _); // wait for a bit for the suggestions to complete, but not too much (avoid IIS resets) task.Wait(15000, database.WorkContext.CancellationToken); return suggestionQueryIndexExtension.Query(suggestionQuery, indexReader); } }
public SuggestionQueryResult ExecuteSuggestionQuery(string indexName, SuggestionQuery suggestionQuery) { if (suggestionQuery == null) throw new ArgumentNullException("suggestionQuery"); if (string.IsNullOrWhiteSpace(suggestionQuery.Term)) throw new ArgumentNullException("suggestionQuery.Term"); if (string.IsNullOrWhiteSpace(indexName)) throw new ArgumentNullException("indexName"); if (string.IsNullOrWhiteSpace(suggestionQuery.Field)) throw new ArgumentNullException("suggestionQuery.Field"); if (suggestionQuery.MaxSuggestions <= 0) suggestionQuery.MaxSuggestions = 10; if (suggestionQuery.Accuracy <= 0 || suggestionQuery.Accuracy > 1) suggestionQuery.Accuracy = 0.5f; suggestionQuery.MaxSuggestions = Math.Min(suggestionQuery.MaxSuggestions, _database.Configuration.MaxPageSize); var indexExtensionKey = MonoHttpUtility.UrlEncode(suggestionQuery.Field + "-" + suggestionQuery.Distance + "-" + suggestionQuery.Accuracy); var indexExtension = _database.IndexStorage.GetIndexExtension(indexName, indexExtensionKey) as SuggestionQueryIndexExtension; IndexSearcher currentSearcher; using (_database.IndexStorage.GetCurrentIndexSearcher(indexName, out currentSearcher)) { if (currentSearcher == null) { throw new InvalidOperationException("Could not find current searcher"); } var indexReader = currentSearcher.IndexReader; if (indexExtension != null) return indexExtension.Query(suggestionQuery, indexReader); var suggestionQueryIndexExtension = new SuggestionQueryIndexExtension( Path.Combine(_database.Configuration.IndexStoragePath, "Raven-Suggestions", indexName, indexExtensionKey), indexReader, GetStringDistance(suggestionQuery.Distance), suggestionQuery.Field, suggestionQuery.Accuracy); suggestionQueryIndexExtension.Init(indexReader); _database.IndexStorage.SetIndexExtension(indexName, indexExtensionKey, suggestionQueryIndexExtension); return suggestionQueryIndexExtension.Query(suggestionQuery, indexReader); } }
public SuggestionQueryResult ExecuteSuggestionQuery(string indexName, SuggestionQuery suggestionQuery) { if (suggestionQuery == null) { throw new ArgumentNullException("suggestionQuery"); } if (string.IsNullOrWhiteSpace(suggestionQuery.Term)) { throw new ArgumentNullException("suggestionQuery.Term"); } if (string.IsNullOrWhiteSpace(indexName)) { throw new ArgumentNullException("indexName"); } if (string.IsNullOrWhiteSpace(suggestionQuery.Field)) { throw new ArgumentNullException("suggestionQuery.Field"); } suggestionQuery.MaxSuggestions = Math.Min(suggestionQuery.MaxSuggestions, database.Configuration.MaxPageSize); if (suggestionQuery.MaxSuggestions <= 0) { suggestionQuery.MaxSuggestions = SuggestionQuery.DefaultMaxSuggestions; } if (suggestionQuery.Accuracy.HasValue && (suggestionQuery.Accuracy.Value <= 0f || suggestionQuery.Accuracy.Value > 1f)) { suggestionQuery.Accuracy = SuggestionQuery.DefaultAccuracy; } if (suggestionQuery.Accuracy.HasValue == false) { suggestionQuery.Accuracy = SuggestionQuery.DefaultAccuracy; } if (suggestionQuery.Distance.HasValue == false) { suggestionQuery.Distance = StringDistanceTypes.Default; } var definition = database.IndexDefinitionStorage.GetIndexDefinition(indexName); var indexExtensionKey = MonoHttpUtility.UrlEncode(suggestionQuery.Field + "-" + suggestionQuery.Distance + "-" + suggestionQuery.Accuracy); var indexExtension = database.IndexStorage.GetIndexExtensionByPrefix(indexName, indexExtensionKey) as SuggestionQueryIndexExtension; IndexSearcher currentSearcher; using (database.IndexStorage.GetCurrentIndexSearcher(definition.IndexId, out currentSearcher)) { if (currentSearcher == null) { throw new InvalidOperationException("Could not find current searcher"); } var indexReader = currentSearcher.IndexReader; if (indexExtension != null) { return(indexExtension.Query(suggestionQuery, indexReader)); } var suggestionQueryIndexExtension = new SuggestionQueryIndexExtension( database.WorkContext, Path.Combine(database.Configuration.IndexStoragePath, "Raven-Suggestions", indexName, indexExtensionKey), GetStringDistance(suggestionQuery.Distance ?? StringDistanceTypes.Default), indexReader.Directory() is RAMDirectory, suggestionQuery.Field, suggestionQuery.Accuracy ?? 0.5f); database.IndexStorage.SetIndexExtension(indexName, indexExtensionKey, suggestionQueryIndexExtension); long _; var task = Task.Factory.StartNew(() => suggestionQueryIndexExtension.Init(indexReader)); database.Tasks.AddTask(task, new object(), new TaskActions.PendingTaskDescription { Payload = indexName, TaskType = TaskActions.PendingTaskType.SuggestionQuery, StartTime = SystemTime.UtcNow }, out _); // wait for a bit for the suggestions to complete, but not too much (avoid IIS resets) task.Wait(15000, database.WorkContext.CancellationToken); return(suggestionQueryIndexExtension.Query(suggestionQuery, indexReader)); } }
public SuggestionQueryResult ExecuteSuggestionQuery(string indexName, SuggestionQuery suggestionQuery) { if (suggestionQuery == null) { throw new ArgumentNullException("suggestionQuery"); } if (string.IsNullOrWhiteSpace(suggestionQuery.Term)) { throw new ArgumentNullException("suggestionQuery.Term"); } if (string.IsNullOrWhiteSpace(indexName)) { throw new ArgumentNullException("indexName"); } if (string.IsNullOrWhiteSpace(suggestionQuery.Field)) { throw new ArgumentNullException("suggestionQuery.Field"); } if (suggestionQuery.MaxSuggestions <= 0) { suggestionQuery.MaxSuggestions = 10; } if (suggestionQuery.Accuracy <= 0 || suggestionQuery.Accuracy > 1) { suggestionQuery.Accuracy = 0.5f; } suggestionQuery.MaxSuggestions = Math.Min(suggestionQuery.MaxSuggestions, database.Configuration.MaxPageSize); var indexExtensionKey = MonoHttpUtility.UrlEncode(suggestionQuery.Field + "-" + suggestionQuery.Distance + "-" + suggestionQuery.Accuracy); var indexExtension = ( database.IndexStorage.GetIndexExtension(indexName, indexExtensionKey) ?? database.IndexStorage.GetIndexExtensionByPrefix(indexName, MonoHttpUtility.UrlEncode(suggestionQuery.Field + "-" + suggestionQuery.Distance)) ?? database.IndexStorage.GetIndexExtensionByPrefix(indexName, MonoHttpUtility.UrlEncode(suggestionQuery.Field)) ) as SuggestionQueryIndexExtension; IndexSearcher currentSearcher; using (database.IndexStorage.GetCurrentIndexSearcher(indexName, out currentSearcher)) { if (currentSearcher == null) { throw new InvalidOperationException("Could not find current searcher"); } var indexReader = currentSearcher.IndexReader; if (indexExtension != null) { return(indexExtension.Query(suggestionQuery, indexReader)); } var suggestionQueryIndexExtension = new SuggestionQueryIndexExtension( database.WorkContext, Path.Combine(database.Configuration.IndexStoragePath, "Raven-Suggestions", indexName, indexExtensionKey), indexReader.Directory() is RAMDirectory, GetStringDistance(suggestionQuery.Distance), suggestionQuery.Field, suggestionQuery.Accuracy); database.IndexStorage.SetIndexExtension(indexName, indexExtensionKey, suggestionQueryIndexExtension); long _; var task = Task.Factory.StartNew(() => suggestionQueryIndexExtension.Init(indexReader)); database.AddTask(task, new object(), out _); // wait for a bit for the suggestions to complete, but not too much (avoid IIS resets) task.Wait(15000, database.WorkContext.CancellationToken); return(suggestionQueryIndexExtension.Query(suggestionQuery, indexReader)); } }