Methods Summary |
---|
final void | close()
if (origEnum != null)
origEnum.close();
if (indexEnum != null)
indexEnum.close();
enumerators.set(null);
|
private synchronized void | ensureIndexIsRead()
if (indexTerms != null) // index already read
return; // do nothing
try {
int indexSize = (int)indexEnum.size; // otherwise read index
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;
}
} finally {
indexEnum.close();
indexEnum = null;
}
|
final org.apache.lucene.index.Term | get(int position)Returns the nth term in the set.
if (size == 0) return null;
SegmentTermEnum enumerator = getEnum();
if (enumerator != null && enumerator.term() != null &&
position >= enumerator.position &&
position < (enumerator.position + enumerator.indexInterval))
return scanEnum(position); // can avoid seek
seekEnum(position / enumerator.indexInterval); // must seek
return scanEnum(position);
|
org.apache.lucene.index.TermInfo | get(org.apache.lucene.index.Term term)Returns the TermInfo for a Term in the set, or null.
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
&& ((enumerator.prev() != null && term.compareTo(enumerator.prev())> 0)
|| term.compareTo(enumerator.term()) >= 0)) {
int enumOffset = (int)(enumerator.position/enumerator.indexInterval)+1;
if (indexTerms.length == enumOffset // but before end of block
|| term.compareTo(indexTerms[enumOffset]) < 0)
return scanEnum(term); // no need to seek
}
// random-access: must seek
seekEnum(getIndexOffset(term));
return scanEnum(term);
|
private org.apache.lucene.index.SegmentTermEnum | getEnum()
SegmentTermEnum termEnum = (SegmentTermEnum)enumerators.get();
if (termEnum == null) {
termEnum = terms();
enumerators.set(termEnum);
}
return termEnum;
|
private final int | getIndexOffset(org.apache.lucene.index.Term term)Returns the offset of the greatest index entry which is less than or equal to term.
int lo = 0; // binary search indexTerms[]
int hi = indexTerms.length - 1;
while (hi >= lo) {
int mid = (lo + hi) >> 1;
int delta = term.compareTo(indexTerms[mid]);
if (delta < 0)
hi = mid - 1;
else if (delta > 0)
lo = mid + 1;
else
return mid;
}
return hi;
|
final long | getPosition(org.apache.lucene.index.Term term)Returns the position of a Term in the set or -1.
if (size == 0) return -1;
ensureIndexIsRead();
int indexOffset = getIndexOffset(term);
seekEnum(indexOffset);
SegmentTermEnum enumerator = getEnum();
while(term.compareTo(enumerator.term()) > 0 && enumerator.next()) {}
if (term.compareTo(enumerator.term()) == 0)
return enumerator.position;
else
return -1;
|
public int | getSkipInterval()
return origEnum.skipInterval;
|
private final org.apache.lucene.index.TermInfo | scanEnum(org.apache.lucene.index.Term term)Scans within block for matching term.
SegmentTermEnum enumerator = getEnum();
enumerator.scanTo(term);
if (enumerator.term() != null && term.compareTo(enumerator.term()) == 0)
return enumerator.termInfo();
else
return null;
|
private final org.apache.lucene.index.Term | scanEnum(int position)
SegmentTermEnum enumerator = getEnum();
while(enumerator.position < position)
if (!enumerator.next())
return null;
return enumerator.term();
|
private final void | seekEnum(int indexOffset)
getEnum().seek(indexPointers[indexOffset],
(indexOffset * getEnum().indexInterval) - 1,
indexTerms[indexOffset], indexInfos[indexOffset]);
|
final long | size()Returns the number of term/value pairs in the set.
return size;
|
public org.apache.lucene.index.SegmentTermEnum | terms()Returns an enumeration of all the Terms and TermInfos in the set.
return (SegmentTermEnum)origEnum.clone();
|
public org.apache.lucene.index.SegmentTermEnum | terms(org.apache.lucene.index.Term term)Returns an enumeration of terms starting at or after the named term.
get(term);
return (SegmentTermEnum)getEnum().clone();
|