diff --git a/.code-samples.meilisearch.yaml b/.code-samples.meilisearch.yaml index 271e7969..e2f69bd5 100644 --- a/.code-samples.meilisearch.yaml +++ b/.code-samples.meilisearch.yaml @@ -852,3 +852,5 @@ export_post_1: |- indexes.put("*", ExportIndexFilter.builder().overrideSettings(true).build()); ExportRequest request = ExportRequest.builder().url("TARGET_INSTANCE_URL").indexes(indexes).build(); client.export(request); +compact_index_1: |- + client.index("INDEX_NAME").compact(); diff --git a/src/main/java/com/meilisearch/sdk/Index.java b/src/main/java/com/meilisearch/sdk/Index.java index 1eb01bec..4d1265a1 100644 --- a/src/main/java/com/meilisearch/sdk/Index.java +++ b/src/main/java/com/meilisearch/sdk/Index.java @@ -1295,4 +1295,18 @@ public TaskInfo updateEmbeddersSettings(Map embedders) public TaskInfo resetEmbeddersSettings() throws MeilisearchException { return this.settingsHandler.resetEmbedders(this.uid); } + + /** + * Compacts the database for this index to reclaim unused space + * + * @return TaskInfo instance + * @throws MeilisearchException if an error occurs + * @see API specification + */ + public TaskInfo compact() throws MeilisearchException { + return this.config.httpClient.post( + new URLBuilder("/indexes").addSubroute(this.uid).addSubroute("/compact").getURL(), + null, + TaskInfo.class); + } } diff --git a/src/test/java/com/meilisearch/integration/ClientTest.java b/src/test/java/com/meilisearch/integration/ClientTest.java index b8dad858..62a31311 100644 --- a/src/test/java/com/meilisearch/integration/ClientTest.java +++ b/src/test/java/com/meilisearch/integration/ClientTest.java @@ -345,4 +345,35 @@ public void testTransientFieldExclusion() throws MeilisearchException { InaccessibleObjectException.class, () -> gsonWithTransient.toJson(test)); Assertions.assertDoesNotThrow(() -> gson.toJson(test)); } + + @Test + public void testCompactWithDocuments() throws Exception { + String indexUid = "testCompactWithDocuments"; + Index index = createEmptyIndex(indexUid, this.primaryKey); + + TaskInfo addTask = + index.addDocuments( + "[{" + + "\"id\": 1," + + "\"title\": \"Document1\"," + + "\"description\": \"Test document 1\"" + + "}," + + "{" + + "\"id\": 2," + + "\"title\": \"Document2\"," + + "\"description\": \"Test document 2\"" + + "}]"); + index.waitForTask(addTask.getTaskUid()); + + TaskInfo compactTask = index.compact(); + client.waitForTask(compactTask.getTaskUid()); + Task completedCompactTask = client.getTask(compactTask.getTaskUid()); + + assertThat(compactTask.getStatus(), is(equalTo(TaskStatus.ENQUEUED))); + assertThat(completedCompactTask.getType(), is(equalTo("indexCompaction"))); + assertThat(completedCompactTask.getStatus(), is(equalTo(TaskStatus.SUCCEEDED))); + + assertThat(index.getDocument("1", Movie.class).getTitle(), is(equalTo("Document1"))); + assertThat(index.getDocument("2", Movie.class).getTitle(), is(equalTo("Document2"))); + } }