Index: CHANGES.txt =================================================================== --- CHANGES.txt (revision 888320) +++ CHANGES.txt (working copy) @@ -50,6 +50,11 @@ lots of seeking (Mike McCandless, Uwe Schindler, Robert Muir, Yonik Seeley) +* LUCENE-2136: If the multi reader (DirectoryReader or MultiReader) + only has a single sub-reader, delegate all enum requests to it. + This avoid the overhead of using a PQ unecessarily. (Mike + McCandless) + Build Test Cases Index: src/java/org/apache/lucene/index/MultiReader.java =================================================================== --- src/java/org/apache/lucene/index/MultiReader.java (revision 888320) +++ src/java/org/apache/lucene/index/MultiReader.java (working copy) @@ -103,7 +103,12 @@ @Override public Fields fields() throws IOException { - return fields; + if (subReaders.length == 1) { + // Optimize the single reader case + return subReaders[0].fields(); + } else { + return fields; + } } /** Index: src/java/org/apache/lucene/index/DirectoryReader.java =================================================================== --- src/java/org/apache/lucene/index/DirectoryReader.java (revision 888320) +++ src/java/org/apache/lucene/index/DirectoryReader.java (working copy) @@ -763,10 +763,15 @@ ensureOpen(); return new MultiTermDocs(this, subReaders, starts); } - + @Override public Fields fields() throws IOException { - return fields; + if (subReaders.length == 1) { + // Optimize the single reader case + return subReaders[0].fields(); + } else { + return fields; + } } @Override Index: src/java/org/apache/lucene/index/ParallelReader.java =================================================================== --- src/java/org/apache/lucene/index/ParallelReader.java (revision 888320) +++ src/java/org/apache/lucene/index/ParallelReader.java (working copy) @@ -151,7 +151,12 @@ @Override public TermsEnum terms() throws IOException { assert currentReader != null; - return currentReader.fields().terms(currentField).iterator(); + Terms terms = currentReader.fields().terms(currentField); + if (terms != null) { + return terms.iterator(); + } else { + return null; + } } } Index: contrib/regex/src/test/org/apache/lucene/search/regex/TestRegexQuery.java =================================================================== --- contrib/regex/src/test/org/apache/lucene/search/regex/TestRegexQuery.java (revision 888320) +++ contrib/regex/src/test/org/apache/lucene/search/regex/TestRegexQuery.java (working copy) @@ -83,7 +83,6 @@ public void testMatchAll() throws Exception { RegexTermsEnum terms = (RegexTermsEnum) new RegexQuery(new Term(FN, "jum.")).getTermsEnum(searcher.getIndexReader()); // no term should match - assertNull(terms.term()); assertNull(terms.next()); }