I already wrote an comment in the flex issue about that. Its not really
good. Maybe we should change the FilteredTermsEnum also to require calling
next() first, which makes it more useable like an iterator. I was always not
so happy with the fact, that you need to have the strange do...while loop.

For NRQ, the change is simple, just remove the next() call in the ctor. For
other FilteredTermsEnums its similar, just move the seek code to the first
next call.

In my opinion, code should look like that:

TermsEnum te = MTQ.getTermsEnum();
TermRef term;
while ((term = te.next()) != null) {
        ..
}

Uwe

-----
Uwe Schindler
H.-H.-Meier-Allee 63, D-28213 Bremen
http://www.thetaphi.de
eMail: u...@thetaphi.de

> -----Original Message-----
> From: Mark Miller [mailto:markrmil...@gmail.com]
> Sent: Thursday, December 03, 2009 12:56 AM
> To: java-dev@lucene.apache.org
> Subject: Re: svn commit: r886339 -
> /lucene/java/branches/flex_1458/src/test/org/apache/lucene/search/TestNume
> ricRangeQuery32.java
> 
> I see where I was confused - I was looking at the javadoc for TermsEnum,
> which says you must call next or seek before getting the term - but I
> was more confused than straightened out when I saw FilteredTermsEnum
> said the enum must already be positioned at the first term - it didn't
> dawn on me that they acted different in that regard - thats why I put
> the nocommit - was a bit confused. Looking at the code, it makes sense
> now though.
> 
> I do agree that its a bit confusing now that you have to call .empty
> first now. Thats what led me down the path of trying .next != null -
> didn't even occur to me there was a .empty. Knew something was screwy
> though, even with the test passing.
> > ---
> lucene/java/branches/flex_1458/src/test/org/apache/lucene/search/TestNumer
> icRangeQuery32.java (original)
> > +++
> lucene/java/branches/flex_1458/src/test/org/apache/lucene/search/TestNumer
> icRangeQuery32.java Wed Dec  2 23:27:49 2009
> > @@ -443,9 +443,8 @@
> >      NumericRangeQuery<Integer> q =
> NumericRangeQuery.newIntRange("field4", 4,
> >          lower, upper, true, true);
> >      FilteredTermsEnum termEnum =
> q.getTermsEnum(searcher.getIndexReader());
> > -    //nocommit: double check this merge 'fix'
> >      int count = 0;
> > -    if (termEnum.next() != null) {
> > +    if (!termEnum.empty()) {
> >        do {
> >          final TermRef t = termEnum.term();
> >          if (t != null) {
> > @@ -457,7 +456,7 @@
> >            break;
> >        } while (termEnum.next() != null);
> >      }
> > -    assertFalse(termEnum.next() != null);
> > +    assertNotNull(termEnum.next());
> >      System.out.println("TermEnum on 'field4' for range [" + lower + ","
> + upper
> >          + "] contained " + count + " terms.");
> >
> 
> 
> ---------------------------------------------------------------------
> 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