Thoughts?
Doug
Index: src/java/org/apache/lucene/index/TermInfosReader.java
===================================================================
--- src/java/org/apache/lucene/index/TermInfosReader.java (revision 155349)
+++ src/java/org/apache/lucene/index/TermInfosReader.java (working copy)
@@ -33,6 +33,12 @@
private SegmentTermEnum origEnum;
private long size;
+ private Term[] indexTerms = null;
+ private TermInfo[] indexInfos;
+ private long[] indexPointers;
+
+ private SegmentTermEnum indexEnum;
+
TermInfosReader(Directory dir, String seg, FieldInfos fis)
throws IOException {
directory = dir;
@@ -42,7 +48,10 @@
origEnum = new SegmentTermEnum(directory.openInput(segment + ".tis"),
fieldInfos, false);
size = origEnum.size;
- readIndex();
+
+ indexEnum =
+ new SegmentTermEnum(directory.openInput(segment + ".tii"),
+ fieldInfos, true);
}
protected void finalize() {
@@ -73,28 +82,23 @@
return termEnum;
}
- Term[] indexTerms = null;
- TermInfo[] indexInfos;
- long[] indexPointers;
-
- private final void readIndex() throws IOException {
- SegmentTermEnum indexEnum =
- new SegmentTermEnum(directory.openInput(segment + ".tii"),
- fieldInfos, true);
+ private final void ensureIndexIsRead() throws IOException {
+ if (indexTerms != null)
+ return;
try {
int indexSize = (int)indexEnum.size;
indexTerms = new Term[indexSize];
indexInfos = new TermInfo[indexSize];
indexPointers = new long[indexSize];
-
+
for (int i = 0; indexEnum.next(); i++) {
- indexTerms[i] = indexEnum.term();
- indexInfos[i] = indexEnum.termInfo();
- indexPointers[i] = indexEnum.indexPointer;
+ indexTerms[i] = indexEnum.term();
+ indexInfos[i] = indexEnum.termInfo();
+ indexPointers[i] = indexEnum.indexPointer;
}
} finally {
- indexEnum.close();
+ indexEnum.close();
}
}
@@ -126,6 +130,8 @@
TermInfo get(Term term) throws IOException {
if (size == 0) return null;
+ ensureIndexIsRead();
+
// optimize sequential access: first try scanning cached enum w/o seeking
SegmentTermEnum enumerator = getEnum();
if (enumerator.term() != null // term is at or past current
@@ -179,6 +185,7 @@
final long getPosition(Term term) throws IOException {
if (size == 0) return -1;
+ ensureIndexIsRead();
int indexOffset = getIndexOffset(term);
seekEnum(indexOffset);
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
