/// <summary> /// <seealso cref="Query.Rewrite(IndexReader)"/> /// </summary> public override Query Rewrite(IndexReader reader) { CustomScoreQuery clone = null; Query sq = subQuery.Rewrite(reader); if (sq != subQuery) { clone = (CustomScoreQuery)Clone(); clone.subQuery = sq; } for (int i = 0; i < scoringQueries.Length; i++) { Query v = scoringQueries[i].Rewrite(reader); if (v != scoringQueries[i]) { if (clone == null) { clone = (CustomScoreQuery)Clone(); } clone.scoringQueries[i] = v; } } return(clone ?? this); }
private readonly float[] vScores; // reused in score() to avoid allocating this array for each doc // constructor internal CustomScorer(CustomScoreQuery outerInstance, CustomScoreProvider provider, CustomWeight w, float qWeight, Scorer subQueryScorer, Scorer[] valSrcScorers) : base(w) { this.outerInstance = outerInstance; this.qWeight = qWeight; this.subQueryScorer = subQueryScorer; this.valSrcScorers = valSrcScorers; this.vScores = new float[valSrcScorers.Length]; this.provider = provider; }
public CustomWeight(CustomScoreQuery outerInstance, IndexSearcher searcher) { this.outerInstance = outerInstance; this.subQueryWeight = outerInstance.subQuery.CreateWeight(searcher); this.valSrcWeights = new Weight[outerInstance.scoringQueries.Length]; for (int i = 0; i < outerInstance.scoringQueries.Length; i++) { this.valSrcWeights[i] = outerInstance.scoringQueries[i].CreateWeight(searcher); } this.qStrict = outerInstance.strict; }