Aaaahh, right. OK thanks for putting it back. And I'll add a test over on flex to assert this.
Mike On Tue, Dec 8, 2009 at 10:28 AM, Uwe Schindler <u...@thetaphi.de> wrote: > It is defined to be null. > > Because the enums in trunk are positioned on the first term (because > IR.terms(Term) positions the enum on the first term, if the term does not > exist, it must be null, else you cannot detect that the enum is empty). > Because of that you have the do-while loops in trunk! > > In flex, the enum is unpositioned and you always have to call next() first. > In flex it behaves as it should, but in trunk its not intuitive. > > See e.g. FieldCache or MTQ in trunk, the loops are different! > > ----- > Uwe Schindler > H.-H.-Meier-Allee 63, D-28213 Bremen > http://www.thetaphi.de > eMail: u...@thetaphi.de > > >> -----Original Message----- >> From: Michael McCandless [mailto:luc...@mikemccandless.com] >> Sent: Tuesday, December 08, 2009 4:25 PM >> To: java-dev@lucene.apache.org >> Subject: Re: svn commit: r888398 - in /lucene/java/trunk: CHANGES.txt >> contrib/regex/src/test/org/apache/lucene/search/regex/TestRegexQuery.java >> src/java/org/apache/lucene/index/DirectoryReader.java >> src/java/org/apache/lucene/index/MultiReader.java >> >> Sorry, right, test passed on trunk, but it's still not valid even on >> trunk (I think?). Ie TermEnum.term() is undefined until you've called >> next? >> >> Mike >> >> On Tue, Dec 8, 2009 at 10:18 AM, Uwe Schindler <u...@thetaphi.de> wrote: >> > Mike I checked, >> > >> > it seems that you simply copied the code from flex, where the test must >> be >> > removed. >> > >> > In trunk, I'll revert, test passes correctly. I was a little bit >> confused, >> > why it should not pass. >> > >> > ----- >> > Uwe Schindler >> > H.-H.-Meier-Allee 63, D-28213 Bremen >> > http://www.thetaphi.de >> > eMail: u...@thetaphi.de >> > >> > >> >> -----Original Message----- >> >> From: Uwe Schindler [mailto:u...@thetaphi.de] >> >> Sent: Tuesday, December 08, 2009 4:00 PM >> >> To: java-dev@lucene.apache.org >> >> Subject: RE: svn commit: r888398 - in /lucene/java/trunk: CHANGES.txt >> >> >> contrib/regex/src/test/org/apache/lucene/search/regex/TestRegexQuery.java >> >> src/java/org/apache/lucene/index/DirectoryReader.java >> >> src/java/org/apache/lucene/index/MultiReader.java >> >> >> >> Mike, >> >> >> >> the test for RegEx was correct, it uses getEnum() not getTermsEnum()! >> So >> >> the >> >> first term returned must be null, because the enum must be positioned >> on >> >> the >> >> first term (which was the case for old enums). If that is not the case >> >> such >> >> a query would at least hit one term. So in trunk this test is perfectly >> >> legal and important! >> >> >> >> ----- >> >> Uwe Schindler >> >> H.-H.-Meier-Allee 63, D-28213 Bremen >> >> http://www.thetaphi.de >> >> eMail: u...@thetaphi.de >> >> >> >> >> >> > -----Original Message----- >> >> > From: mikemcc...@apache.org [mailto:mikemcc...@apache.org] >> >> > Sent: Tuesday, December 08, 2009 2:47 PM >> >> > To: java-comm...@lucene.apache.org >> >> > Subject: svn commit: r888398 - in /lucene/java/trunk: CHANGES.txt >> >> > >> >> >> contrib/regex/src/test/org/apache/lucene/search/regex/TestRegexQuery.java >> >> > src/java/org/apache/lucene/index/DirectoryReader.java >> >> > src/java/org/apache/lucene/index/MultiReader.java >> >> > >> >> > Author: mikemccand >> >> > Date: Tue Dec 8 13:47:20 2009 >> >> > New Revision: 888398 >> >> > >> >> > URL: http://svn.apache.org/viewvc?rev=888398&view=rev >> >> > Log: >> >> > LUCENE-2136: optimization: if Multi/DirectoryReader only has a single >> >> > reader, delegate enums to it >> >> > >> >> > Modified: >> >> > lucene/java/trunk/CHANGES.txt >> >> > >> >> > >> >> >> lucene/java/trunk/contrib/regex/src/test/org/apache/lucene/search/regex/Te >> >> > stRegexQuery.java >> >> > >> >> > >> lucene/java/trunk/src/java/org/apache/lucene/index/DirectoryReader.java >> >> > >> lucene/java/trunk/src/java/org/apache/lucene/index/MultiReader.java >> >> > >> >> > Modified: lucene/java/trunk/CHANGES.txt >> >> > URL: >> >> > >> >> >> http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?rev=888398&r1=8 >> >> > 88397&r2=888398&view=diff >> >> > >> >> >> ========================================================================== >> >> > ==== >> >> > --- lucene/java/trunk/CHANGES.txt (original) >> >> > +++ lucene/java/trunk/CHANGES.txt Tue Dec 8 13:47:20 2009 >> >> > @@ -70,6 +70,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 >> >> > >> >> > Modified: >> >> > >> >> >> lucene/java/trunk/contrib/regex/src/test/org/apache/lucene/search/regex/Te >> >> > stRegexQuery.java >> >> > URL: >> >> > >> >> >> http://svn.apache.org/viewvc/lucene/java/trunk/contrib/regex/src/test/org/ >> >> > >> >> >> apache/lucene/search/regex/TestRegexQuery.java?rev=888398&r1=888397&r2=888 >> >> > 398&view=diff >> >> > >> >> >> ========================================================================== >> >> > ==== >> >> > --- >> >> > >> >> >> lucene/java/trunk/contrib/regex/src/test/org/apache/lucene/search/regex/Te >> >> > stRegexQuery.java (original) >> >> > +++ >> >> > >> >> >> lucene/java/trunk/contrib/regex/src/test/org/apache/lucene/search/regex/Te >> >> > stRegexQuery.java Tue Dec 8 13:47:20 2009 >> >> > @@ -83,7 +83,6 @@ >> >> > public void testMatchAll() throws Exception { >> >> > TermEnum terms = new RegexQuery(new Term(FN, >> >> > "jum.")).getEnum(searcher.getIndexReader()); >> >> > // no term should match >> >> > - assertNull(terms.term()); >> >> > assertFalse(terms.next()); >> >> > } >> >> > >> >> > >> >> > Modified: >> >> > >> lucene/java/trunk/src/java/org/apache/lucene/index/DirectoryReader.java >> >> > URL: >> >> > >> >> >> http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/ >> >> > index/DirectoryReader.java?rev=888398&r1=888397&r2=888398&view=diff >> >> > >> >> >> ========================================================================== >> >> > ==== >> >> > --- >> >> > >> lucene/java/trunk/src/java/org/apache/lucene/index/DirectoryReader.java >> >> > (original) >> >> > +++ >> >> > >> lucene/java/trunk/src/java/org/apache/lucene/index/DirectoryReader.java >> >> > Tue Dec 8 13:47:20 2009 >> >> > @@ -627,13 +627,23 @@ >> >> > �...@override >> >> > public TermEnum terms() throws IOException { >> >> > ensureOpen(); >> >> > - return new MultiTermEnum(this, subReaders, starts, null); >> >> > + if (subReaders.length == 1) { >> >> > + // Optimize single segment case: >> >> > + return subReaders[0].terms(); >> >> > + } else { >> >> > + return new MultiTermEnum(this, subReaders, starts, null); >> >> > + } >> >> > } >> >> > >> >> > �...@override >> >> > public TermEnum terms(Term term) throws IOException { >> >> > ensureOpen(); >> >> > - return new MultiTermEnum(this, subReaders, starts, term); >> >> > + if (subReaders.length == 1) { >> >> > + // Optimize single segment case: >> >> > + return subReaders[0].terms(term); >> >> > + } else { >> >> > + return new MultiTermEnum(this, subReaders, starts, term); >> >> > + } >> >> > } >> >> > >> >> > �...@override >> >> > @@ -648,13 +658,34 @@ >> >> > �...@override >> >> > public TermDocs termDocs() throws IOException { >> >> > ensureOpen(); >> >> > - return new MultiTermDocs(this, subReaders, starts); >> >> > + if (subReaders.length == 1) { >> >> > + // Optimize single segment case: >> >> > + return subReaders[0].termDocs(); >> >> > + } else { >> >> > + return new MultiTermDocs(this, subReaders, starts); >> >> > + } >> >> > + } >> >> > + >> >> > + �...@override >> >> > + public TermDocs termDocs(Term term) throws IOException { >> >> > + ensureOpen(); >> >> > + if (subReaders.length == 1) { >> >> > + // Optimize single segment case: >> >> > + return subReaders[0].termDocs(term); >> >> > + } else { >> >> > + return super.termDocs(term); >> >> > + } >> >> > } >> >> > >> >> > �...@override >> >> > public TermPositions termPositions() throws IOException { >> >> > ensureOpen(); >> >> > - return new MultiTermPositions(this, subReaders, starts); >> >> > + if (subReaders.length == 1) { >> >> > + // Optimize single segment case: >> >> > + return subReaders[0].termPositions(); >> >> > + } else { >> >> > + return new MultiTermPositions(this, subReaders, starts); >> >> > + } >> >> > } >> >> > >> >> > /** >> >> > >> >> > Modified: >> >> > lucene/java/trunk/src/java/org/apache/lucene/index/MultiReader.java >> >> > URL: >> >> > >> >> >> http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/ >> >> > index/MultiReader.java?rev=888398&r1=888397&r2=888398&view=diff >> >> > >> >> >> ========================================================================== >> >> > ==== >> >> > --- >> lucene/java/trunk/src/java/org/apache/lucene/index/MultiReader.java >> >> > (original) >> >> > +++ >> lucene/java/trunk/src/java/org/apache/lucene/index/MultiReader.java >> >> > Tue Dec 8 13:47:20 2009 >> >> > @@ -339,13 +339,23 @@ >> >> > �...@override >> >> > public TermEnum terms() throws IOException { >> >> > ensureOpen(); >> >> > - return new MultiTermEnum(this, subReaders, starts, null); >> >> > + if (subReaders.length == 1) { >> >> > + // Optimize single segment case: >> >> > + return subReaders[0].terms(); >> >> > + } else { >> >> > + return new MultiTermEnum(this, subReaders, starts, null); >> >> > + } >> >> > } >> >> > >> >> > �...@override >> >> > public TermEnum terms(Term term) throws IOException { >> >> > ensureOpen(); >> >> > - return new MultiTermEnum(this, subReaders, starts, term); >> >> > + if (subReaders.length == 1) { >> >> > + // Optimize single segment case: >> >> > + return subReaders[0].terms(term); >> >> > + } else { >> >> > + return new MultiTermEnum(this, subReaders, starts, term); >> >> > + } >> >> > } >> >> > >> >> > �...@override >> >> > @@ -360,13 +370,34 @@ >> >> > �...@override >> >> > public TermDocs termDocs() throws IOException { >> >> > ensureOpen(); >> >> > - return new MultiTermDocs(this, subReaders, starts); >> >> > + if (subReaders.length == 1) { >> >> > + // Optimize single segment case: >> >> > + return subReaders[0].termDocs(); >> >> > + } else { >> >> > + return new MultiTermDocs(this, subReaders, starts); >> >> > + } >> >> > + } >> >> > + >> >> > + �...@override >> >> > + public TermDocs termDocs(Term term) throws IOException { >> >> > + ensureOpen(); >> >> > + if (subReaders.length == 1) { >> >> > + // Optimize single segment case: >> >> > + return subReaders[0].termDocs(term); >> >> > + } else { >> >> > + return super.termDocs(term); >> >> > + } >> >> > } >> >> > >> >> > �...@override >> >> > public TermPositions termPositions() throws IOException { >> >> > ensureOpen(); >> >> > - return new MultiTermPositions(this, subReaders, starts); >> >> > + if (subReaders.length == 1) { >> >> > + // Optimize single segment case: >> >> > + return subReaders[0].termPositions(); >> >> > + } else { >> >> > + return new MultiTermPositions(this, subReaders, starts); >> >> > + } >> >> > } >> >> > >> >> > �...@override >> >> > >> >> >> >> >> >> >> >> --------------------------------------------------------------------- >> >> To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org >> >> For additional commands, e-mail: java-dev-h...@lucene.apache.org >> > >> > >> > >> > --------------------------------------------------------------------- >> > To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org >> > For additional commands, e-mail: java-dev-h...@lucene.apache.org >> > >> > >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org >> For additional commands, e-mail: java-dev-h...@lucene.apache.org > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org > For additional commands, e-mail: java-dev-h...@lucene.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org For additional commands, e-mail: java-dev-h...@lucene.apache.org