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]