From 6ace6fc3119f47359e53b997daa225fd73646f72 Mon Sep 17 00:00:00 2001 From: Krishna Varshney Date: Tue, 11 Aug 2026 12:24:32 +0530 Subject: [PATCH 1/2] feat(stats): add indexSize and usedIndexSize to IndexStats (#988) --- .../com/meilisearch/sdk/model/IndexStats.java | 46 +++++++++++++++++++ .../sdk/json/GsonJsonHandlerTest.java | 14 ++++++ .../sdk/json/JacksonJsonHandlerTest.java | 14 ++++++ 3 files changed, 74 insertions(+) diff --git a/src/main/java/com/meilisearch/sdk/model/IndexStats.java b/src/main/java/com/meilisearch/sdk/model/IndexStats.java index fffbded53..c99fcbafd 100644 --- a/src/main/java/com/meilisearch/sdk/model/IndexStats.java +++ b/src/main/java/com/meilisearch/sdk/model/IndexStats.java @@ -1,7 +1,9 @@ package com.meilisearch.sdk.model; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.Map; import lombok.Getter; +import lombok.Setter; /** * Stats data structure of a Meilisearch Index @@ -10,15 +12,35 @@ * specification */ @Getter +@Setter public class IndexStats { + @JsonProperty("numberOfDocuments") protected long numberOfDocuments; + + @JsonProperty("isIndexing") protected boolean isIndexing; + + @JsonProperty("fieldDistribution") protected Map fieldDistribution; + + @JsonProperty("rawDocumentDbSize") protected long rawDocumentDbSize; + + @JsonProperty("avgDocumentSize") protected long avgDocumentSize; + + @JsonProperty("numberOfEmbeddedDocuments") protected long numberOfEmbeddedDocuments; + + @JsonProperty("numberOfEmbeddings") protected long numberOfEmbeddings; + @JsonProperty("indexSize") + protected long indexSize; + + @JsonProperty("usedIndexSize") + protected long usedIndexSize; + public IndexStats() {} public IndexStats( @@ -29,6 +51,28 @@ public IndexStats( long avgDocumentSize, long numberOfEmbeddedDocuments, long numberOfEmbeddings) { + this( + numberOfDocuments, + isIndexing, + fieldDistribution, + rawDocumentDbSize, + avgDocumentSize, + numberOfEmbeddedDocuments, + numberOfEmbeddings, + 0L, + 0L); + } + + public IndexStats( + long numberOfDocuments, + boolean isIndexing, + Map fieldDistribution, + long rawDocumentDbSize, + long avgDocumentSize, + long numberOfEmbeddedDocuments, + long numberOfEmbeddings, + long indexSize, + long usedIndexSize) { this.numberOfDocuments = numberOfDocuments; this.isIndexing = isIndexing; this.fieldDistribution = fieldDistribution; @@ -36,5 +80,7 @@ public IndexStats( this.avgDocumentSize = avgDocumentSize; this.numberOfEmbeddedDocuments = numberOfEmbeddedDocuments; this.numberOfEmbeddings = numberOfEmbeddings; + this.indexSize = indexSize; + this.usedIndexSize = usedIndexSize; } } diff --git a/src/test/java/com/meilisearch/sdk/json/GsonJsonHandlerTest.java b/src/test/java/com/meilisearch/sdk/json/GsonJsonHandlerTest.java index 5de9593be..3cfaf7c95 100644 --- a/src/test/java/com/meilisearch/sdk/json/GsonJsonHandlerTest.java +++ b/src/test/java/com/meilisearch/sdk/json/GsonJsonHandlerTest.java @@ -291,6 +291,20 @@ void granularFilterableAttributesWithNullPatternRoundTrip() throws Exception { assertThat(decoded[0].getAttributePatterns(), arrayContaining("director", null, "genres")); } + @Test + void decodeIndexStatsWithIndexSizeAndUsedIndexSize() { + String json = + "{\"numberOfDocuments\":10,\"isIndexing\":false,\"fieldDistribution\":{},\"rawDocumentDbSize\":1024,\"avgDocumentSize\":102,\"numberOfEmbeddedDocuments\":0,\"numberOfEmbeddings\":0,\"indexSize\":2048,\"usedIndexSize\":1500}"; + + com.meilisearch.sdk.model.IndexStats indexStats = + classToTest.decode(json, com.meilisearch.sdk.model.IndexStats.class); + + assertThat(indexStats, is(notNullValue())); + assertThat(indexStats.getNumberOfDocuments(), is(equalTo(10L))); + assertThat(indexStats.getIndexSize(), is(equalTo(2048L))); + assertThat(indexStats.getUsedIndexSize(), is(equalTo(1500L))); + } + @Getter private static class Container { private Key key; diff --git a/src/test/java/com/meilisearch/sdk/json/JacksonJsonHandlerTest.java b/src/test/java/com/meilisearch/sdk/json/JacksonJsonHandlerTest.java index c30235b4a..d9eb6e76c 100644 --- a/src/test/java/com/meilisearch/sdk/json/JacksonJsonHandlerTest.java +++ b/src/test/java/com/meilisearch/sdk/json/JacksonJsonHandlerTest.java @@ -178,4 +178,18 @@ void settingsWithAdvancedGranularFilterableAttributesRoundTripWithCustomMapper() .getComparison(), is(false)); } + + @Test + void decodeIndexStatsWithIndexSizeAndUsedIndexSize() throws Exception { + String json = + "{\"numberOfDocuments\":10,\"isIndexing\":false,\"fieldDistribution\":{},\"rawDocumentDbSize\":1024,\"avgDocumentSize\":102,\"numberOfEmbeddedDocuments\":0,\"numberOfEmbeddings\":0,\"indexSize\":2048,\"usedIndexSize\":1500}"; + + com.meilisearch.sdk.model.IndexStats indexStats = + classToTest.decode(json, com.meilisearch.sdk.model.IndexStats.class); + + assertThat(indexStats, is(notNullValue())); + assertThat(indexStats.getNumberOfDocuments(), is(equalTo(10L))); + assertThat(indexStats.getIndexSize(), is(equalTo(2048L))); + assertThat(indexStats.getUsedIndexSize(), is(equalTo(1500L))); + } } From 304a4b7b4e86510b62317ab52f85a22ac8bc58eb Mon Sep 17 00:00:00 2001 From: Krishna Varshney Date: Tue, 11 Aug 2026 12:48:50 +0530 Subject: [PATCH 2/2] refactor(model): bind isIndexing via accessor method to prevent duplicate Jackson property --- .../com/meilisearch/sdk/model/IndexStats.java | 22 +++++-------------- .../sdk/json/JacksonJsonHandlerTest.java | 14 ++++++++++++ 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/meilisearch/sdk/model/IndexStats.java b/src/main/java/com/meilisearch/sdk/model/IndexStats.java index c99fcbafd..756b35e0f 100644 --- a/src/main/java/com/meilisearch/sdk/model/IndexStats.java +++ b/src/main/java/com/meilisearch/sdk/model/IndexStats.java @@ -14,31 +14,14 @@ @Getter @Setter public class IndexStats { - @JsonProperty("numberOfDocuments") protected long numberOfDocuments; - - @JsonProperty("isIndexing") protected boolean isIndexing; - - @JsonProperty("fieldDistribution") protected Map fieldDistribution; - - @JsonProperty("rawDocumentDbSize") protected long rawDocumentDbSize; - - @JsonProperty("avgDocumentSize") protected long avgDocumentSize; - - @JsonProperty("numberOfEmbeddedDocuments") protected long numberOfEmbeddedDocuments; - - @JsonProperty("numberOfEmbeddings") protected long numberOfEmbeddings; - - @JsonProperty("indexSize") protected long indexSize; - - @JsonProperty("usedIndexSize") protected long usedIndexSize; public IndexStats() {} @@ -83,4 +66,9 @@ public IndexStats( this.indexSize = indexSize; this.usedIndexSize = usedIndexSize; } + + @JsonProperty("isIndexing") + public boolean isIndexing() { + return isIndexing; + } } diff --git a/src/test/java/com/meilisearch/sdk/json/JacksonJsonHandlerTest.java b/src/test/java/com/meilisearch/sdk/json/JacksonJsonHandlerTest.java index d9eb6e76c..2479777d2 100644 --- a/src/test/java/com/meilisearch/sdk/json/JacksonJsonHandlerTest.java +++ b/src/test/java/com/meilisearch/sdk/json/JacksonJsonHandlerTest.java @@ -192,4 +192,18 @@ void decodeIndexStatsWithIndexSizeAndUsedIndexSize() throws Exception { assertThat(indexStats.getIndexSize(), is(equalTo(2048L))); assertThat(indexStats.getUsedIndexSize(), is(equalTo(1500L))); } + + @Test + void serializeIndexStats() throws Exception { + com.meilisearch.sdk.model.IndexStats indexStats = + new com.meilisearch.sdk.model.IndexStats( + 10, false, new java.util.HashMap<>(), 1024, 102, 0, 0, 2048, 1500); + + String json = classToTest.encode(indexStats); + + assertThat(json, org.hamcrest.Matchers.containsString("\"isIndexing\":false")); + assertThat( + json, + org.hamcrest.Matchers.not(org.hamcrest.Matchers.containsString("\"indexing\""))); + } }