Hi Folks,
I just tried to index a data set that was probably 2x as large as the previous
one I'd been using with the same code. The indexing completed fine, although
it was slower than I would have liked. ;-) But the following problem occurs
when I try to use FieldCache to look up an indexed and stored value:
java.lang.ArrayIndexOutOfBoundsException: -65406
at
org.apache.lucene.util.PagedBytes$Reader.fillUsingLengthPrefix(PagedBytes.java:98)
at
org.apache.lucene.search.FieldCacheImpl$DocTermsImpl.getTerm(FieldCacheImpl.java:918)
at ...
The code that does this has been working for quite some time and has been
unmodified:
/** Find a string field value, given the lucene ID, field name, and value.
*/
protected String getStringValue(int luceneID, String fieldName)
throws IOException
{
// Find the right reader
final int idx = readerIndex(luceneID, starts, readers.length);
final int docBase = starts[idx];
final IndexReader reader = readers[idx];
BytesRef ref =
FieldCache.DEFAULT.getTerms(reader,fieldName).getTerm(luceneID-docBase,new
BytesRef());
String rval = ref.utf8ToString();
//System.out.println(" Reading luceneID "+Integer.toString(luceneID)+"
field "+fieldName+" with result '"+rval+"'");
return rval;
}
}
I added a try/catch to see what values were going into the key line:
catch (RuntimeException e)
{
System.out.println("LuceneID = "+luceneID+", fieldName='"+fieldName+"',
idx="+idx+", docBase="+docBase);
System.out.println("Readers = "+readers.length);
int i = 0;
while (i < readers.length)
{
System.out.println(" Reader start "+i+" is "+starts[i]);
i++;
}
throw e;
}
The resulting output was:
LuceneID = 34466856, fieldName='id', idx=0, docBase=0
Readers = 1
Reader start 0 is 0
... which looks reasonable on the face of things. This is a version of trunk
from approximately 8/12/2010, so it is fairly old. Was there a fix for a
problem that could account for this behavior? Should I simply synch up? Or am
I doing something wrong here? The schema for the id field is:
<fieldType name="string_idx" class="solr.StrField" sortMissingLast="true"
indexed="true" stored="true"/>
<field name="id" type="string_idx" required="true"/>
Karl