This is an automated email from the ASF dual-hosted git repository. fmariani pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit 29e02cb0ac1f133fa7691c14fe391332eea1b39d Author: Salvatore Mongiardo <[email protected]> AuthorDate: Tue Mar 24 15:21:44 2026 +0100 Camel-Milvus: collection must be loaded into memory before DML operations --- .../camel/component/milvus/MilvusProducer.java | 2 + .../component/milvus/it/MilvusComponentIT.java | 101 ++++++++++++++++++++- 2 files changed, 100 insertions(+), 3 deletions(-) diff --git a/components/camel-ai/camel-milvus/src/main/java/org/apache/camel/component/milvus/MilvusProducer.java b/components/camel-ai/camel-milvus/src/main/java/org/apache/camel/component/milvus/MilvusProducer.java index d76837286629..293791ba1379 100644 --- a/components/camel-ai/camel-milvus/src/main/java/org/apache/camel/component/milvus/MilvusProducer.java +++ b/components/camel-ai/camel-milvus/src/main/java/org/apache/camel/component/milvus/MilvusProducer.java @@ -178,6 +178,8 @@ public class MilvusProducer extends DefaultProducer { final Message in = exchange.getMessage(); final DeleteParam body = in.getMandatoryBody(DeleteParam.class); + this.client.loadCollection( + LoadCollectionParam.newBuilder().withCollectionName(getEndpoint().getCollection()).withSyncLoad(true).build()); R<MutationResult> result = this.client.delete(body); handleResponseStatus(result); diff --git a/components/camel-ai/camel-milvus/src/test/java/org/apache/camel/component/milvus/it/MilvusComponentIT.java b/components/camel-ai/camel-milvus/src/test/java/org/apache/camel/component/milvus/it/MilvusComponentIT.java index ba6c42e6b0eb..191fa01e2be2 100644 --- a/components/camel-ai/camel-milvus/src/test/java/org/apache/camel/component/milvus/it/MilvusComponentIT.java +++ b/components/camel-ai/camel-milvus/src/test/java/org/apache/camel/component/milvus/it/MilvusComponentIT.java @@ -42,7 +42,9 @@ import org.apache.camel.component.milvus.MilvusTestSupport; import org.apache.camel.component.milvus.helpers.MilvusHelperCreateCollection; import org.apache.camel.component.milvus.helpers.MilvusHelperCreateIndex; import org.apache.camel.component.milvus.helpers.MilvusHelperDelete; +import org.apache.camel.component.milvus.helpers.MilvusHelperInsert; import org.apache.camel.component.milvus.helpers.MilvusHelperSearch; +import org.apache.camel.component.milvus.helpers.MilvusHelperUpsert; import org.apache.camel.support.DefaultExchange; import org.assertj.core.util.Lists; import org.junit.jupiter.api.*; @@ -324,9 +326,102 @@ public class MilvusComponentIT extends MilvusTestSupport { @Test @Order(12) + public void createRagCollectionWithHelper() throws Exception { + MilvusHelperCreateCollection helper = new MilvusHelperCreateCollection(); + helper.setCollectionName("test_helper_rag"); + helper.setCollectionDescription("helper RAG test collection"); + helper.setIdFieldName("docID"); + helper.setVectorFieldName("embedding"); + helper.setTextFieldName("content"); + helper.setTextFieldDataType("VarChar"); + helper.setTextFieldMaxLength("2048"); + helper.setDimension("64"); + + Exchange tempExchange = new DefaultExchange(context); + helper.process(tempExchange); + + Exchange result = fluentTemplate.to("milvus:test_helper_rag") + .withHeader(MilvusHeaders.ACTION, tempExchange.getIn().getHeader(MilvusHeaders.ACTION)) + .withBody(tempExchange.getIn().getBody()) + .request(Exchange.class); + + assertThat(result).isNotNull(); + assertThat(result.getException()).isNull(); + } + + @Test + @Order(13) + public void createRagIndexWithHelper() throws Exception { + MilvusHelperCreateIndex helper = new MilvusHelperCreateIndex(); + helper.setCollectionName("test_helper_rag"); + helper.setVectorFieldName("embedding"); + helper.setIndexName("embeddingIndex"); + helper.setIndexType("IVF_FLAT"); + helper.setMetricType("L2"); + helper.setExtraParam("{\"nlist\":128}"); + + Exchange tempExchange = new DefaultExchange(context); + helper.process(tempExchange); + + Exchange result = fluentTemplate.to("milvus:test_helper_rag") + .withHeader(MilvusHeaders.ACTION, tempExchange.getIn().getHeader(MilvusHeaders.ACTION)) + .withBody(tempExchange.getIn().getBody()) + .request(Exchange.class); + + assertThat(result).isNotNull(); + assertThat(result.getException()).isNull(); + } + + @Test + @Order(14) + public void insertWithHelper() throws Exception { + MilvusHelperInsert helper = new MilvusHelperInsert(); + helper.setCollectionName("test_helper_rag"); + helper.setVectorFieldName("embedding"); + helper.setTextFieldMappings("content=contentVar"); + + Exchange tempExchange = new DefaultExchange(context); + tempExchange.setVariable("contentVar", "This is a test document for RAG"); + tempExchange.getIn().setBody(generateFloatVector()); + helper.process(tempExchange); + + Exchange result = fluentTemplate.to("milvus:test_helper_rag") + .withHeader(MilvusHeaders.ACTION, tempExchange.getIn().getHeader(MilvusHeaders.ACTION)) + .withBody(tempExchange.getIn().getBody()) + .request(Exchange.class); + + assertThat(result).isNotNull(); + assertThat(result.getException()).isNull(); + } + + @Test + @Order(15) + public void upsertWithHelper() throws Exception { + MilvusHelperUpsert helper = new MilvusHelperUpsert(); + helper.setCollectionName("test_helper_rag"); + helper.setVectorFieldName("embedding"); + helper.setTextFieldMappings("content=contentVar"); + + Exchange tempExchange = new DefaultExchange(context); + tempExchange.setVariable("contentVar", "Updated document content"); + tempExchange.getIn().setBody(generateFloatVector()); + helper.process(tempExchange); + + Exchange result = fluentTemplate.to("milvus:test_helper_rag") + .withHeader(MilvusHeaders.ACTION, tempExchange.getIn().getHeader(MilvusHeaders.ACTION)) + .withBody(tempExchange.getIn().getBody()) + .request(Exchange.class); + + assertThat(result).isNotNull(); + // upsert without docID field will fail (autoID collection) + Assertions.assertTrue(result.isFailed()); + } + + @Test + @Order(16) public void searchWithHelper() throws Exception { MilvusHelperSearch helper = new MilvusHelperSearch(); - helper.setCollectionName("test"); + helper.setCollectionName("test_helper"); helper.setOutputFields("userAge"); helper.setFilter("userAge>0"); helper.setLimit("100"); @@ -336,7 +431,7 @@ public class MilvusComponentIT extends MilvusTestSupport { tempExchange.getIn().setBody(generateFloatVector()); helper.process(tempExchange); - Exchange result = fluentTemplate.to("milvus:test") + Exchange result = fluentTemplate.to("milvus:test_helper") .withHeader(MilvusHeaders.ACTION, tempExchange.getIn().getHeader(MilvusHeaders.ACTION)) .withBody(tempExchange.getIn().getBody()) .request(Exchange.class); @@ -346,7 +441,7 @@ public class MilvusComponentIT extends MilvusTestSupport { } @Test - @Order(13) + @Order(17) public void deleteWithHelper() throws Exception { MilvusHelperDelete helper = new MilvusHelperDelete(); helper.setCollectionName("test_helper");
