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]