Methods Summary |
---|
public int | doc()Returns the current document number matching the query.
Initially invalid, until {@link #next()} is called the first time. return doc;
|
public org.apache.lucene.search.Explanation | explain(int doc)Returns an explanation of the score for a document.
When this method is used, the {@link #next()} method
and the {@link #score(HitCollector)} method should not be used.
TermQuery query = (TermQuery)weight.getQuery();
Explanation tfExplanation = new Explanation();
int tf = 0;
while (pointer < pointerMax) {
if (docs[pointer] == doc)
tf = freqs[pointer];
pointer++;
}
if (tf == 0) {
while (termDocs.next()) {
if (termDocs.doc() == doc) {
tf = termDocs.freq();
}
}
}
termDocs.close();
tfExplanation.setValue(getSimilarity().tf(tf));
tfExplanation.setDescription("tf(termFreq("+query.getTerm()+")="+tf+")");
return tfExplanation;
|
public boolean | next()Advances to the next document matching the query.
The iterator over the matching documents is buffered using
{@link TermDocs#read(int[],int[])}.
pointer++;
if (pointer >= pointerMax) {
pointerMax = termDocs.read(docs, freqs); // refill buffer
if (pointerMax != 0) {
pointer = 0;
} else {
termDocs.close(); // close stream
doc = Integer.MAX_VALUE; // set to sentinel value
return false;
}
}
doc = docs[pointer];
return true;
|
public void | score(org.apache.lucene.search.HitCollector hc)
next();
score(hc, Integer.MAX_VALUE);
|
protected boolean | score(org.apache.lucene.search.HitCollector c, int end)
Similarity similarity = getSimilarity(); // cache sim in local
float[] normDecoder = Similarity.getNormDecoder();
while (doc < end) { // for docs in window
int f = freqs[pointer];
float score = // compute tf(f)*weight
f < SCORE_CACHE_SIZE // check cache
? scoreCache[f] // cache hit
: similarity.tf(f)*weightValue; // cache miss
score *= normDecoder[norms[doc] & 0xFF]; // normalize for field
c.collect(doc, score); // collect score
if (++pointer >= pointerMax) {
pointerMax = termDocs.read(docs, freqs); // refill buffers
if (pointerMax != 0) {
pointer = 0;
} else {
termDocs.close(); // close stream
doc = Integer.MAX_VALUE; // set to sentinel value
return false;
}
}
doc = docs[pointer];
}
return true;
|
public float | score()
int f = freqs[pointer];
float raw = // compute tf(f)*weight
f < SCORE_CACHE_SIZE // check cache
? scoreCache[f] // cache hit
: getSimilarity().tf(f)*weightValue; // cache miss
return raw * Similarity.decodeNorm(norms[doc]); // normalize for field
|
public boolean | skipTo(int target)Skips to the first match beyond the current whose document number is
greater than or equal to a given target.
The implementation uses {@link TermDocs#skipTo(int)}.
// first scan in cache
for (pointer++; pointer < pointerMax; pointer++) {
if (docs[pointer] >= target) {
doc = docs[pointer];
return true;
}
}
// not found in cache, seek underlying stream
boolean result = termDocs.skipTo(target);
if (result) {
pointerMax = 1;
pointer = 0;
docs[pointer] = doc = termDocs.doc();
freqs[pointer] = termDocs.freq();
} else {
doc = Integer.MAX_VALUE;
}
return result;
|
public java.lang.String | toString()Returns a string representation of this TermScorer . return "scorer(" + weight + ")";
|