GetSearcher() private method

private GetSearcher ( IndexSearcher &searcher ) : IDisposable
searcher Lucene.Net.Search.IndexSearcher
return IDisposable
コード例 #1
0
            public IEnumerable <IndexQueryResult> Query()
            {
                using (IndexStorage.EnsureInvariantCulture())
                {
                    AssertQueryDoesNotContainFieldsThatAreNotIndexes();
                    IndexSearcher indexSearcher;
                    using (parent.GetSearcher(out indexSearcher))
                    {
                        var luceneQuery = ApplyIndexTriggers(GetLuceneQuery());

                        int start                       = indexQuery.Start;
                        int pageSize                    = indexQuery.PageSize;
                        int returnedResults             = 0;
                        int skippedResultsInCurrentLoop = 0;
                        do
                        {
                            if (skippedResultsInCurrentLoop > 0)
                            {
                                start = start + pageSize;
                                // trying to guesstimate how many results we will need to read from the index
                                // to get enough unique documents to match the page size
                                pageSize = skippedResultsInCurrentLoop * indexQuery.PageSize;
                                skippedResultsInCurrentLoop = 0;
                            }
                            TopDocs search = ExecuteQuery(indexSearcher, luceneQuery, start, pageSize, indexQuery);
                            indexQuery.TotalSize.Value = search.TotalHits;

                            RecordResultsAlreadySeenForDistinctQuery(indexSearcher, search, start, pageSize);

                            for (var i = start; (i - start) < pageSize && i < search.ScoreDocs.Length; i++)
                            {
                                Document         document         = indexSearcher.Doc(search.ScoreDocs[i].doc);
                                IndexQueryResult indexQueryResult = parent.RetrieveDocument(document, fieldsToFetch, search.ScoreDocs[i].score);
                                if (ShouldIncludeInResults(indexQueryResult) == false)
                                {
                                    indexQuery.SkippedResults.Value++;
                                    skippedResultsInCurrentLoop++;
                                    continue;
                                }

                                returnedResults++;
                                yield return(indexQueryResult);

                                if (returnedResults == indexQuery.PageSize)
                                {
                                    yield break;
                                }
                            }
                        } while (skippedResultsInCurrentLoop > 0 && returnedResults < indexQuery.PageSize);
                    }
                }
            }
コード例 #2
0
        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);
                }
            }
        }
コード例 #3
0
ファイル: IndexStorage.cs プロジェクト: felipeleusin/ravendb
		private void LoadExistingSuggestionsExtentions(string indexName, Index indexImplementation)
		{
			var suggestionsForIndex = Path.Combine(configuration.IndexStoragePath, "Raven-Suggestions", indexName);
			if (!Directory.Exists(suggestionsForIndex))
				return;

		    try
		    {
		        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), CultureInfo.InvariantCulture);
		                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(
							indexImplementation,
		                    documentDatabase.WorkContext,
							Path.Combine(configuration.IndexStoragePath, "Raven-Suggestions", indexName, key),
		                    SuggestionQueryRunner.GetStringDistance(distanceType),
							searcher.IndexReader.Directory() is RAMDirectory,
		                    field,
		                    accuracy);
		                indexImplementation.SetExtension(key, extension);
		            }
		        }
		    }
		    catch (Exception e)
		    {
		        log.WarnException("Could not open suggestions for index " + indexName + ", resetting the index", e);
		        try
		        {
		            IOExtensions.DeleteDirectory(suggestionsForIndex);
		        }
		        catch (Exception)
		        {
		            // ignore the failure
		        }
		        throw;
		    }
		}
コード例 #4
0
ファイル: IndexStorage.cs プロジェクト: synhershko/ravendb
		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);
				}
			}
		}