@Override public SpanScorer scorer(LeafReaderContext context) throws IOException { final Spans spans = getSpans(context, Postings.POSITIONS); if (spans == null) { return null; } final Similarity.SimScorer docScorer = getSimScorer(context); return new SpanScorer(this, spans, docScorer); }
/** * Ensure setFreqCurrentDoc is called, if not already called for the current doc. */ private void ensureFreq() throws IOException { int currentDoc = docID(); if (lastScoredDoc != currentDoc) { setFreqCurrentDoc(); lastScoredDoc = currentDoc; } }
@Override public final float score() throws IOException { ensureFreq(); return scoreCurrentDoc(); }
@Override public Explanation explain(LeafReaderContext context, int doc) throws IOException { SpanScorer scorer = scorer(context); if (scorer != null) { int newDoc = scorer.iterator().advance(doc); if (newDoc == doc) { float freq = scorer.sloppyFreq(); SimScorer docScorer = similarity.simScorer(simWeight, context); Explanation freqExplanation = Explanation.match(freq, "phraseFreq=" + freq); Explanation scoreExplanation = docScorer.explain(doc, freqExplanation); return Explanation.match(scoreExplanation.getValue(), "weight("+getQuery()+" in "+doc+") [" + similarity.getClass().getSimpleName() + "], result of:", scoreExplanation); } } return Explanation.noMatch("no matching term"); }
public Explanation explain(final int doc) throws IOException { Explanation tfExplanation = new Explanation(); skipTo(doc); float phraseFreq = (doc() == doc) ? freq : 0.0f; tfExplanation.setValue(getSimilarity().tf(phraseFreq)); tfExplanation.setDescription("tf(phraseFreq=" + phraseFreq + ")"); return tfExplanation; }
/** * Returns the SpanScorer score only. * <p> * Should not be overridden without good cause! * * @return the score for just the Span part w/o the payload * @throws IOException if there is a low-level I/O error * * @see #score() */ protected float getSpanScore() throws IOException { return super.scoreCurrentDoc(); }
public boolean next() throws IOException { if (firstTime) { more = spans.next(); firstTime = false; } return setFreqCurrentDoc(); }
/** Returns the intermediate "sloppy freq" adjusted for edit distance * @lucene.internal */ final float sloppyFreq() throws IOException { ensureFreq(); return freq; }
/** * Score the current doc. The default implementation scores the doc * with the similarity using the slop-adjusted {@link #freq}. */ protected float scoreCurrentDoc() throws IOException { assert docScorer != null : getClass() + " has a null docScorer!"; return docScorer.score(docID(), freq); }
public float score() throws IOException { float raw = getSimilarity().tf(freq) * value; // raw score return raw * Similarity.decodeNorm(norms[doc]); // normalize }
public Explanation explain(final int doc) throws IOException { Explanation result = new Explanation(); Explanation nonPayloadExpl = super.explain(doc); result.addDetail(nonPayloadExpl); //QUESTION: Is there a wau to avoid this skipTo call? We need to know whether to load the payload or not Explanation payloadBoost = new Explanation(); result.addDetail(payloadBoost); /* if (skipTo(doc) == true) { processPayload(); } */ float avgPayloadScore = (payloadsSeen > 0 ? (payloadScore / payloadsSeen) : 1); payloadBoost.setValue(avgPayloadScore); //GSI: I suppose we could toString the payload, but I don't think that would be a good idea payloadBoost.setDescription("scorePayload(...)"); result.setValue(nonPayloadExpl.getValue() * avgPayloadScore); result.setDescription("btq, product of:"); return result; } }
@Override public Explanation explain(LeafReaderContext context, int doc) throws IOException { SpanScorer scorer = scorer(context); if (scorer != null) { int newDoc = scorer.iterator().advance(doc); if (newDoc == doc) { float freq = scorer.sloppyFreq(); SimScorer docScorer = similarity.simScorer(simWeight, context); Explanation freqExplanation = Explanation.match(freq, "phraseFreq=" + freq); Explanation scoreExplanation = docScorer.explain(doc, freqExplanation); return Explanation.match(scoreExplanation.getValue(), "weight("+getQuery()+" in "+doc+") [" + similarity.getClass().getSimpleName() + "], result of:", scoreExplanation); } } return Explanation.noMatch("no matching term"); }
public Explanation explain(final int doc) throws IOException { Explanation tfExplanation = new Explanation(); skipTo(doc); float phraseFreq = (doc() == doc) ? freq : 0.0f; tfExplanation.setValue(getSimilarity().tf(phraseFreq)); tfExplanation.setDescription("tf(phraseFreq=" + phraseFreq + ")"); return tfExplanation; }
protected float getSpanScore() throws IOException { return super.scoreCurrentDoc(); }
public boolean next() throws IOException { if (firstTime) { more = spans.next(); firstTime = false; } return setFreqCurrentDoc(); }
/** Returns the intermediate "sloppy freq" adjusted for edit distance * @lucene.internal */ final float sloppyFreq() throws IOException { ensureFreq(); return freq; }
/** * Score the current doc. The default implementation scores the doc * with the similarity using the slop-adjusted {@link #freq}. */ protected float scoreCurrentDoc() throws IOException { assert docScorer != null : getClass() + " has a null docScorer!"; return docScorer.score(docID(), freq); }
public float score() throws IOException { float raw = getSimilarity().tf(freq) * value; // raw score return raw * Similarity.decodeNorm(norms[doc]); // normalize }
public Explanation explain(final int doc) throws IOException { ComplexExplanation result = new ComplexExplanation(); Explanation nonPayloadExpl = super.explain(doc); result.addDetail(nonPayloadExpl); //QUESTION: Is there a wau to avoid this skipTo call? We need to know whether to load the payload or not Explanation payloadBoost = new Explanation(); result.addDetail(payloadBoost); /* if (skipTo(doc) == true) { processPayload(); } */ float avgPayloadScore = (payloadsSeen > 0 ? (payloadScore / payloadsSeen) : 1); payloadBoost.setValue(avgPayloadScore); //GSI: I suppose we could toString the payload, but I don't think that would be a good idea payloadBoost.setDescription("scorePayload(...)"); result.setValue(nonPayloadExpl.getValue() * avgPayloadScore); result.setDescription("btq, product of:"); result.setMatch(nonPayloadExpl.getValue()==0 ? Boolean.FALSE : Boolean.TRUE); // LUCENE-1303 return result; } }
@Override public SpanScorer scorer(LeafReaderContext context) throws IOException { final Spans spans = getSpans(context, Postings.POSITIONS); if (spans == null) { return null; } final Similarity.SimScorer docScorer = getSimScorer(context); return new SpanScorer(this, spans, docScorer); }