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

Reply via email to