Re: Strange sort error

2005-04-14 Thread Yonik Seeley
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]



Re: Strange sort error

2005-04-14 Thread Daniel Naber
On Thursday 14 April 2005 16:28, Yonik Seeley wrote:

 I haven't tried it, but I think the fix should be easy... never throw
 that exception.

As Lucene does not have the concept of a warning I think it should throw 
exceptions when someone tries to do something that doesn't make sense 
(even if it's technically possible). And sorting on a field that doesn't 
exist doesn't seem to make sense.

Well, searching on a field that doesn't exist won't give you an exception 
either. For debugging it would be useful if you'd get an exception instead 
of no results.

Regards
 Daniel

-- 
http://www.danielnaber.de

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Strange sort error

2005-04-13 Thread Daniel Naber
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

-- 
http://www.danielnaber.de

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]