Пример #1
0
        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));
            }
        }
Пример #2
0
		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);
			}
		}
Пример #3
0
        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);
			}
		}
Пример #5
0
		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);
			}
		}
Пример #6
0
		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);
			}
		}
Пример #7
0
        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));
            }
        }
Пример #8
0
        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));
            }
        }