// Pulls out child doc and scores for all join queries: private void CopyGroups(OneGroup og) { // While rare, it's possible top arrays could be too // short if join query had null scorer on first // segment(s) but then became non-null on later segments int numSubScorers = joinScorers.Length; if (og.docs.Length < numSubScorers) { // While rare, this could happen if join query had // null scorer on first segment(s) but then became // non-null on later segments og.docs = ArrayUtil.Grow(og.docs); } if (og.counts.Length < numSubScorers) { og.counts = ArrayUtil.Grow(og.counts); } if (trackScores && og.scores.Length < numSubScorers) { og.scores = ArrayUtil.Grow(og.scores); } //System.out.println("\ncopyGroups parentDoc=" + og.doc); for (int scorerIDX = 0; scorerIDX < numSubScorers; scorerIDX++) { ToParentBlockJoinQuery.BlockJoinScorer joinScorer = joinScorers[scorerIDX]; //System.out.println(" scorer=" + joinScorer); if (joinScorer != null && docBase + joinScorer.ParentDoc == og.Doc) { og.counts[scorerIDX] = joinScorer.ChildCount; //System.out.println(" count=" + og.counts[scorerIDX]); og.docs[scorerIDX] = joinScorer.SwapChildDocs(og.docs[scorerIDX]); if (Debugging.AssertsEnabled) { Debugging.Assert(og.docs[scorerIDX].Length >= og.counts[scorerIDX], "length={0} vs count={1}", og.docs[scorerIDX].Length, og.counts[scorerIDX]); } //System.out.println(" len=" + og.docs[scorerIDX].length); /* * for(int idx=0;idx<og.counts[scorerIDX];idx++) { * System.out.println(" docs[" + idx + "]=" + og.docs[scorerIDX][idx]); * } */ if (trackScores) { //System.out.println(" copy scores"); og.scores[scorerIDX] = joinScorer.SwapChildScores(og.scores[scorerIDX]); if (Debugging.AssertsEnabled) { Debugging.Assert(og.scores[scorerIDX].Length >= og.counts[scorerIDX], "length={0} vs count={1}", og.scores[scorerIDX].Length, og.counts[scorerIDX]); } } } else { og.counts[scorerIDX] = 0; } } }
private void Enroll(ToParentBlockJoinQuery query, ToParentBlockJoinQuery.BlockJoinScorer scorer) { scorer.TrackPendingChildHits(); if (joinQueryID.TryGetValue(query, out int?slot)) { joinScorers[(int)slot] = scorer; } else { joinQueryID[query] = joinScorers.Length; //System.out.println("found JQ: " + query + " slot=" + joinScorers.length); ToParentBlockJoinQuery.BlockJoinScorer[] newArray = new ToParentBlockJoinQuery.BlockJoinScorer[1 + joinScorers.Length]; Array.Copy(joinScorers, 0, newArray, 0, joinScorers.Length); joinScorers = newArray; joinScorers[joinScorers.Length - 1] = scorer; } }