Browse Source

Fix bwc serialization of total hits when track_total_hits is false

Jim Ferenczi 7 years ago
parent
commit
34859414a0

+ 1 - 1
server/src/main/java/org/elasticsearch/common/lucene/Lucene.java

@@ -399,7 +399,7 @@ public class Lucene {
         out.writeVLong(totalHits.value);
         if (out.getVersion().onOrAfter(org.elasticsearch.Version.V_7_0_0_alpha1)) {
             out.writeEnum(totalHits.relation);
-        } else if (totalHits.relation != TotalHits.Relation.EQUAL_TO) {
+        } else if (totalHits.value > 0 && totalHits.relation != TotalHits.Relation.EQUAL_TO) {
             throw new IllegalArgumentException("Cannot serialize approximate total hit counts to nodes that are on a version < 7.0.0");
         }
     }

+ 2 - 1
server/src/main/java/org/elasticsearch/search/query/TopDocsCollectorContext.java

@@ -238,7 +238,8 @@ abstract class TopDocsCollectorContext extends QueryCollectorContext {
                     }
                 } else {
                     // total hit count is not needed
-                    this.totalHitsSupplier = () -> topDocsSupplier.get().totalHits;
+                    // for bwc hit count is set to 0, it will be converted to -1 by the coordinating node
+                    this.totalHitsSupplier = () -> new TotalHits(0, TotalHits.Relation.GREATER_THAN_OR_EQUAL_TO);
                 }
                 MaxScoreCollector maxScoreCollector = null;
                 if (trackMaxScore) {