// protected internal override bool SetFreqCurrentDoc() { if (!More) { return(false); } Doc = Spans.Doc(); Freq_Renamed = 0.0f; PayloadScore = 0; PayloadsSeen = 0; do { int matchLength = Spans.End() - Spans.Start(); Freq_Renamed += DocScorer.ComputeSlopFactor(matchLength); Spans[] spansArr = new Spans[1]; spansArr[0] = Spans; GetPayloads(spansArr); More = Spans.Next(); } while (More && (Doc == Spans.Doc())); return(true); }
protected internal override bool SetFreqCurrentDoc() { if (!More) { return(false); } Doc = Spans.Doc(); Freq_Renamed = 0.0f; NumMatches = 0; PayloadScore_Renamed = 0; PayloadsSeen = 0; while (More && Doc == Spans.Doc()) { int matchLength = Spans.End() - Spans.Start(); Freq_Renamed += DocScorer.ComputeSlopFactor(matchLength); NumMatches++; ProcessPayload(OuterInstance.Similarity); More = Spans.Next(); // this moves positions to the next match in this // document } return(More || (Freq_Renamed != 0)); }
protected internal virtual void ProcessPayload(Similarity similarity) { if (TermSpans.PayloadAvailable) { DocsAndPositionsEnum postings = TermSpans.Postings; Payload = postings.Payload; if (Payload != null) { PayloadScore_Renamed = OuterInstance.OuterInstance.Function.CurrentScore(Doc, OuterInstance.OuterInstance.Term.Field, Spans.Start(), Spans.End(), PayloadsSeen, PayloadScore_Renamed, DocScorer.ComputePayloadFactor(Doc, Spans.Start(), Spans.End(), Payload)); } else { PayloadScore_Renamed = OuterInstance.OuterInstance.Function.CurrentScore(Doc, OuterInstance.OuterInstance.Term.Field, Spans.Start(), Spans.End(), PayloadsSeen, PayloadScore_Renamed, 1F); } PayloadsSeen++; } else { // zero out the payload? } }
/// <summary> /// By default, uses the <seealso cref="PayloadFunction"/> to score the payloads, but /// can be overridden to do other things. /// </summary> /// <param name="payLoads"> The payloads </param> /// <param name="start"> The start position of the span being scored </param> /// <param name="end"> The end position of the span being scored /// </param> /// <seealso cref= Spans </seealso> protected internal virtual void ProcessPayloads(ICollection <byte[]> payLoads, int start, int end) { foreach (var thePayload in payLoads) { Scratch.Bytes = thePayload; Scratch.Offset = 0; Scratch.Length = thePayload.Length; PayloadScore = OuterInstance.Function.CurrentScore(Doc, OuterInstance.FieldName, start, end, PayloadsSeen, PayloadScore, DocScorer.ComputePayloadFactor(Doc, Spans.Start(), Spans.End(), Scratch)); ++PayloadsSeen; } }