/// <summary> /// Expert: creates a searcher from the provided /// <see cref="IndexReader"/> using the provided /// <see cref="SearcherFactory"/>. NOTE: this decRefs incoming reader /// on throwing an exception. /// </summary> public static IndexSearcher GetSearcher(SearcherFactory searcherFactory, IndexReader reader) { bool success = false; IndexSearcher searcher; try { searcher = searcherFactory.NewSearcher(reader); if (searcher.IndexReader != reader) { throw new InvalidOperationException("SearcherFactory must wrap exactly the provided reader (got " + searcher.IndexReader + " but expected " + reader + ")"); } success = true; } finally { if (!success) { reader.DecRef(); } } return(searcher); }