Example #1
0
        /// <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);
        }
Example #2
0
            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;
            }
Example #3
0
 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;
 }