> if (termEnum==null || term.field() != field) break; // CHANGE
> here
Errr, that should be term==null of course.
> if (term==null || term.field() != field) break; // CHANGE here
And it *may* be slightly speedier to check for null just before the
do/while loop instead:
if (termEnum.term() != null) {
do {
[...]
} while(...)
}
-Yonik
On 4/14/05, Yonik Seeley <[EMAIL PROTECTED]> wrote:
> I haven't tried it, but I think the fix should be easy... never throw
> that exception. Either check for null before the loop, or in the
> loop.
>
> Original code for native int sorting:
>
> TermEnum termEnum = reader.terms (new Term (field, ""));
> try {
> if (termEnum.term() == null) {
> throw new RuntimeException ("no terms in field " + field);
> }
> do {
> Term term = termEnum.term();
> if (term.field() != field) break;
> int termval = Integer.parseInt (term.text());
> termDocs.seek (termEnum);
> while (termDocs.next()) {
> retArray[termDocs.doc()] = termval;
> }
> } while (termEnum.next());
> } finally {
> termDocs.close();
> termEnum.close();
> }
>
> ------------- possible fix --------------
> TermEnum termEnum = reader.terms (new Term (field, ""));
> try {
> do {
> Term term = termEnum.term();
> if (termEnum==null || term.field() != field) break; // CHANGE
> here
> int termval = Integer.parseInt (term.text());
> termDocs.seek (termEnum);
> while (termDocs.next()) {
> retArray[termDocs.doc()] = termval;
> }
> } while (termEnum.next());
> } finally {
> termDocs.close();
> termEnum.close();
> }
>
> -Yonik
>
> On 4/13/05, Daniel Naber <[EMAIL PROTECTED]> wrote:
> > On Tuesday 12 April 2005 20:04, Bill Tschumy wrote:
> >
> > > Here is a small program that will manifest the error. Hopefully
> > > someone can explain the problem. It happens with Lucene 1.4.2 and
> > > 1.4.3.
> >
> > This is the code that throws the exception (from FieldCacheImpl.java):
> >
> > TermEnum termEnum = reader.terms (new Term (field, ""));
> > (...)
> > if (termEnum.term() == null) {
> > throw new RuntimeException ("no terms in field " + field);
> > }
> >
> > The problem is that a TermEnum always returns all terms after a given one,
> > not only terms in the same field. So the check is incomplete. If one
> > changes the if like this, one will always get an exception if there are no
> > terms in the field, as the exception claims:
> >
> > if (termEnum.term() == null || !termEnum.term().field().equals(field)) {
> >
> > The other issue is that you probably expect to not get an exception at all,
> > as there are no matches. Lucene doesn't first search and then sort, these
> > tasks are parallel I think. So this is not that easy to fix (and I doubt
> > if one should try).
> >
> > Could you open a bug report for the problem with the exception that seems
> > to occur only sometimes? The change suggested above needs to be tested
> > before it can be committed and a bug report is useful for that.
> >
> > Regards
> > Daniel
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]