瀏覽代碼

Set subSearchContext.topDocs after the rescoring in TopDocsAggs

This change fixes a bug introduced in https://github.com/elastic/elasticsearch/pull/20978
The top docs should be set in the subSearchContext after the rescoring
Jim Ferenczi 9 年之前
父節點
當前提交
05915357c9

+ 2 - 2
core/src/main/java/org/elasticsearch/search/aggregations/metrics/tophits/TopHitsAggregator.java

@@ -141,7 +141,6 @@ public class TopHitsAggregator extends MetricsAggregator {
             topHits = buildEmptyAggregation();
             topHits = buildEmptyAggregation();
         } else {
         } else {
             TopDocs topDocs = topDocsCollector.topLevelCollector.topDocs();
             TopDocs topDocs = topDocsCollector.topLevelCollector.topDocs();
-            subSearchContext.queryResult().topDocs(topDocs, subSearchContext.sort() == null ? null : subSearchContext.sort().formats);
             if (subSearchContext.sort() == null) {
             if (subSearchContext.sort() == null) {
                 for (RescoreSearchContext ctx : context().searchContext().rescore()) {
                 for (RescoreSearchContext ctx : context().searchContext().rescore()) {
                     try {
                     try {
@@ -151,7 +150,8 @@ public class TopHitsAggregator extends MetricsAggregator {
                     }
                     }
                 }
                 }
             }
             }
-
+            subSearchContext.queryResult().topDocs(topDocs,
+                subSearchContext.sort() == null ? null : subSearchContext.sort().formats);
             int[] docIdsToLoad = new int[topDocs.scoreDocs.length];
             int[] docIdsToLoad = new int[topDocs.scoreDocs.length];
             for (int i = 0; i < topDocs.scoreDocs.length; i++) {
             for (int i = 0; i < topDocs.scoreDocs.length; i++) {
                 docIdsToLoad[i] = topDocs.scoreDocs[i].doc;
                 docIdsToLoad[i] = topDocs.scoreDocs[i].doc;