diff --git a/server/src/main/java/org/opensearch/search/aggregations/support/MissingValues.java b/server/src/main/java/org/opensearch/search/aggregations/support/MissingValues.java index 429a543281c76..166334292d438 100644 --- a/server/src/main/java/org/opensearch/search/aggregations/support/MissingValues.java +++ b/server/src/main/java/org/opensearch/search/aggregations/support/MissingValues.java @@ -324,7 +324,8 @@ public boolean advanceExact(int doc) throws IOException { @Override public int docValueCount() { - return values.docValueCount(); + // If we don't have ordinals, then we just have the missing value + return hasOrds ? values.docValueCount() : 1; } @Override @@ -359,7 +360,8 @@ public long getValueCount() { @Override public int docValueCount() { - return Math.max(1, values.docValueCount()); + // If we don't have ordinals, then we just have the missing value + return hasOrds ? values.docValueCount() : 1; } @Override diff --git a/server/src/test/java/org/opensearch/search/aggregations/support/MissingValuesTests.java b/server/src/test/java/org/opensearch/search/aggregations/support/MissingValuesTests.java index a0a280c34579e..b92d912c0f5f5 100644 --- a/server/src/test/java/org/opensearch/search/aggregations/support/MissingValuesTests.java +++ b/server/src/test/java/org/opensearch/search/aggregations/support/MissingValuesTests.java @@ -152,7 +152,7 @@ public long nextOrd() { if (i < ords[doc].length) { return ords[doc][i++]; } else { - return NO_MORE_DOCS; + throw new IllegalStateException(); } } @@ -175,13 +175,13 @@ public int docValueCount() { for (int i = 0; i < numDocs; ++i) { assertTrue(withMissingReplaced.advanceExact(i)); if (ords[i].length > 0) { + assertEquals(ords[i].length, withMissingReplaced.docValueCount()); for (int ord : ords[i]) { assertEquals(values[ord], withMissingReplaced.lookupOrd(withMissingReplaced.nextOrd())); } - assertEquals(SortedSetDocValues.NO_MORE_DOCS, withMissingReplaced.nextOrd()); } else { + assertEquals(1, withMissingReplaced.docValueCount()); assertEquals(missing, withMissingReplaced.lookupOrd(withMissingReplaced.nextOrd())); - assertEquals(SortedSetDocValues.NO_MORE_DOCS, withMissingReplaced.nextOrd()); } } }