cpoerschke commented on code in PR #2248: URL: https://github.com/apache/solr/pull/2248#discussion_r1492900283
########## solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java: ########## @@ -1979,36 +2226,84 @@ public ScoreMode scoreMode() { // no docs on this page, so cursor doesn't change qr.setNextCursorMark(cmd.getCursorMark()); } else { - final TopDocsCollector<? extends ScoreDoc> topCollector = buildTopDocsCollector(len, cmd); - DocSetCollector setCollector = new DocSetCollector(maxDoc); - MaxScoreCollector maxScoreCollector = null; - List<Collector> collectors = new ArrayList<>(Arrays.asList(topCollector, setCollector)); - - if ((cmd.getFlags() & GET_SCORES) != 0) { - maxScoreCollector = new MaxScoreCollector(); - collectors.add(maxScoreCollector); - } + MTCollectorQueryCheck allowMT = new MTCollectorQueryCheck(); + query.visit(allowMT); + TopDocs topDocs; + if (pf.postFilter != null + || cmd.getSegmentTerminateEarly() + || cmd.getTimeAllowed() > 0 + || !allowMT.allowed()) { + @SuppressWarnings({"rawtypes"}) + final TopDocsCollector<? extends ScoreDoc> topCollector = buildTopDocsCollector(len, cmd); + DocSetCollector setCollector = new DocSetCollector(maxDoc); + MaxScoreCollector maxScoreCollector = null; + List<Collector> collectors = new ArrayList<>(Arrays.asList(topCollector, setCollector)); + + if ((cmd.getFlags() & GET_SCORES) != 0) { + maxScoreCollector = new MaxScoreCollector(); + collectors.add(maxScoreCollector); + } - Collector collector = MultiCollector.wrap(collectors); + Collector collector = MultiCollector.wrap(collectors); - buildAndRunCollectorChain(qr, query, collector, cmd, pf.postFilter); + buildAndRunCollectorChain(qr, query, collector, cmd, pf.postFilter); - set = DocSetUtil.getDocSet(setCollector, this); + set = DocSetUtil.getDocSet(setCollector, this); + + totalHits = topCollector.getTotalHits(); + assert (totalHits == set.size()) || qr.isPartialResults(); - totalHits = topCollector.getTotalHits(); - assert (totalHits == set.size()) || qr.isPartialResults(); + topDocs = topCollector.topDocs(0, len); + if (cmd.getSort() != null + && !(cmd.getQuery() instanceof RankQuery) + && (cmd.getFlags() & GET_SCORES) != 0) { + TopFieldCollector.populateScores(topDocs.scoreDocs, this, query); + } + populateNextCursorMarkFromTopDocs(qr, cmd, topDocs); + maxScore = + totalHits > 0 + ? (maxScoreCollector == null ? Float.NaN : maxScoreCollector.getMaxScore()) + : 0.0f; + } else { + log.debug("using CollectorManager"); + + boolean needMaxScore = (cmd.getFlags() & GET_SCORES) != 0; + SearchResult searchResult = + searchCollectorManagers(len, cmd, query, true, needMaxScore, true); + Object[] res = searchResult.result; + TopDocsResult result = (TopDocsResult) res[0]; + totalHits = result.totalHits; + topDocs = result.topDocs; + if (needMaxScore) { + if (res.length > 1) { + MaxScoreResult result2 = (MaxScoreResult) res[1]; + maxScore = totalHits > 0 ? result2.maxScore : 0.0f; + } + if (res.length > 2) { + DocSetResult result3 = (DocSetResult) res[2]; + set = result3.docSet; + } + } else { + if (res.length > 1) { + DocSetResult result2 = (DocSetResult) res[1]; + set = result2.docSet; + } + } + + populateNextCursorMarkFromTopDocs(qr, cmd, topDocs); + // if (cmd.getSort() != null && !(cmd.getQuery() instanceof RankQuery) && Review Comment: https://github.com/apache/solr/pull/2248/commits/cb3c1cba7aeb4fb4db426bed50fc6939883d0bcf uncomments some of it. ########## solr/core/src/test/org/apache/solr/TestDistributedSearch.java: ########## @@ -1786,7 +1786,7 @@ private void testMinExactCount() throws Exception { CommonParams.ROWS, "200", CommonParams.SORT, - "score desc, id asc"); + "id asc"); Review Comment: Undone via https://github.com/apache/solr/pull/2248/commits/cb3c1cba7aeb4fb4db426bed50fc6939883d0bcf commit. -- 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