cpoerschke commented on code in PR #2248: URL: https://github.com/apache/solr/pull/2248#discussion_r1489380477
########## solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java: ########## @@ -1874,35 +1881,74 @@ public ScoreMode scoreMode() { qr.setNextCursorMark(cmd.getCursorMark()); hitsRelation = Relation.EQUAL_TO; } else { - final TopDocsCollector<?> topCollector = buildTopDocsCollector(len, cmd); - MaxScoreCollector maxScoreCollector = null; - Collector collector = topCollector; - if ((cmd.getFlags() & GET_SCORES) != 0) { - maxScoreCollector = new MaxScoreCollector(); - collector = MultiCollector.wrap(topCollector, maxScoreCollector); + if (log.isInfoEnabled()) { + log.info("calling from 2, query: {}", query.getClass()); } - final ScoreMode scoreModeUsed = - buildAndRunCollectorChain(qr, query, collector, cmd, pf.postFilter).scoreMode(); + final TopDocs topDocs; + if (!allowMT(pf.postFilter, cmd, query)) { + if (log.isInfoEnabled()) { + log.info("skipping collector manager"); + } + final TopDocsCollector<?> topCollector = buildTopDocsCollector(len, cmd); + MaxScoreCollector maxScoreCollector = null; + Collector collector = topCollector; + if (needScores) { + maxScoreCollector = new MaxScoreCollector(); + collector = MultiCollector.wrap(topCollector, maxScoreCollector); + } + final ScoreMode scoreModeUsed = + buildAndRunCollectorChain(qr, query, collector, cmd, pf.postFilter).scoreMode(); + + totalHits = topCollector.getTotalHits(); + topDocs = topCollector.topDocs(0, len); + if (scoreModeUsed == ScoreMode.COMPLETE || scoreModeUsed == ScoreMode.COMPLETE_NO_SCORES) { + hitsRelation = TotalHits.Relation.EQUAL_TO; + } else { + hitsRelation = topDocs.totalHits.relation; + } + if (cmd.getSort() != null && cmd.getQuery() instanceof RankQuery == false && needScores) { + TopFieldCollector.populateScores(topDocs.scoreDocs, this, query); + } + populateNextCursorMarkFromTopDocs(qr, cmd, topDocs); + + maxScore = + totalHits > 0 + ? (maxScoreCollector == null ? Float.NaN : maxScoreCollector.getMaxScore()) + : 0.0f; + nDocsReturned = topDocs.scoreDocs.length; - totalHits = topCollector.getTotalHits(); - final TopDocs topDocs = topCollector.topDocs(0, len); - if (scoreModeUsed == ScoreMode.COMPLETE || scoreModeUsed == ScoreMode.COMPLETE_NO_SCORES) { - hitsRelation = TotalHits.Relation.EQUAL_TO; } else { - hitsRelation = topDocs.totalHits.relation; - } - if (cmd.getSort() != null - && cmd.getQuery() instanceof RankQuery == false - && (cmd.getFlags() & GET_SCORES) != 0) { - TopFieldCollector.populateScores(topDocs.scoreDocs, this, query); + if (log.isInfoEnabled()) { + log.info("using CollectorManager"); + } + final SearchResult searchResult = + searchCollectorManagers(len, cmd, query, true, needScores, false); + final Object[] res = searchResult.result; + final TopDocsResult result = (TopDocsResult) res[0]; + + totalHits = result.totalHits; + topDocs = result.topDocs; + + if (res.length > 1) { + MaxScoreResult result2 = (MaxScoreResult) res[1]; + maxScore = totalHits > 0 ? result2.maxScore : 0.0f; + } else { + maxScore = Float.NaN; + } + + populateNextCursorMarkFromTopDocs(qr, cmd, topDocs); + if (cmd.getSort() != null && !(cmd.getQuery() instanceof RankQuery) && needScores) { + TopFieldCollector.populateScores(topDocs.scoreDocs, this, query); + } + nDocsReturned = topDocs.scoreDocs.length; + ScoreMode scoreModeUsed = searchResult.scoreMode; + if (scoreModeUsed == ScoreMode.COMPLETE || scoreModeUsed == ScoreMode.COMPLETE_NO_SCORES) { + hitsRelation = TotalHits.Relation.EQUAL_TO; + } else { + hitsRelation = topDocs.totalHits.relation; + } } - populateNextCursorMarkFromTopDocs(qr, cmd, topDocs); - maxScore = - totalHits > 0 - ? (maxScoreCollector == null ? Float.NaN : maxScoreCollector.getMaxScore()) - : 0.0f; - nDocsReturned = topDocs.scoreDocs.length; ids = new int[nDocsReturned]; scores = (cmd.getFlags() & GET_SCORES) != 0 ? new float[nDocsReturned] : null; Review Comment: Well spotted about reuse of `needScores` above in two places, here it can be used too I think. ```suggestion scores = needScores ? new float[nDocsReturned] : null; ``` I've opened #2262 to change that separately for other places in this file too. Am happy to resolve any merge conflicts that may arise for this pull request here. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org For additional commands, e-mail: issues-h...@solr.apache.org