Browse Source

add fluent api for AlterCollectionReq & CreateCollectionReq (#1046)

Signed-off-by: Walter Ye <hupeng.net@hotmail.com>
Walter Ye 10 months ago
parent
commit
20d3fdb510

+ 1 - 0
.gitignore

@@ -26,6 +26,7 @@ hs_err_pid*
 .DS_Store
 
 .idea/
+.vscode/
 target/
 volumes/
 *.iml

+ 16 - 0
README.md

@@ -87,3 +87,19 @@ Please refer to [examples](https://github.com/milvus-io/milvus-sdk-java/tree/mas
         implementation("org.slf4j:slf4j-api:1.7.30")
         ```
  
+## Developer Guide
+
+### init project 101
+This guide is for developers who want to contribute to this project.
+1. fork & clone this project
+2. init submodule
+    ```bash
+    git submodule update --init
+    ```
+3. Reload Maven Project (#479)
+    - if you use Idea, go to Project Root in Idea, right click on `milvus-sdk-java` and select `Maven`  -> `Reload Project`
+    
+Note: 
+    For now, current project do not support JDK 21+.
+    The minimal Lombok version compatible with JDK 21 is 1.18.30.
+    

+ 13 - 2
src/main/java/io/milvus/v2/service/collection/request/AlterCollectionReq.java

@@ -1,7 +1,5 @@
 package io.milvus.v2.service.collection.request;
 
-import io.milvus.exception.ParamException;
-import io.milvus.param.Constant;
 import lombok.Builder;
 import lombok.Data;
 import lombok.experimental.SuperBuilder;
@@ -16,4 +14,17 @@ public class AlterCollectionReq {
     private String databaseName;
     @Builder.Default
     private final Map<String, String> properties = new HashMap<>();
+
+
+
+    public static abstract class AlterCollectionReqBuilder<C extends AlterCollectionReq, B extends AlterCollectionReqBuilder<C, B>> {
+        public B property(String key, String value) {
+            if(null == this.properties$value ){
+                this.properties$value = new HashMap<>();
+            }
+            this.properties$value.put(key, value);
+            this.properties$set = true;
+            return self();
+        }
+    }
 }

+ 17 - 2
src/main/java/io/milvus/v2/service/collection/request/CreateCollectionReq.java

@@ -63,7 +63,8 @@ public class CreateCollectionReq {
     // create collections with schema
     private CollectionSchema collectionSchema;
 
-    private List<IndexParam> indexParams;
+    @Builder.Default
+    private List<IndexParam> indexParams = new ArrayList<>();
 
     //private String partitionKeyField;
     private Integer numPartitions;
@@ -71,13 +72,26 @@ public class CreateCollectionReq {
     @Builder.Default
     private ConsistencyLevel consistencyLevel = ConsistencyLevel.BOUNDED;
 
+    public static abstract class CreateCollectionReqBuilder<C extends CreateCollectionReq, B extends CreateCollectionReq.CreateCollectionReqBuilder<C, B>> {
+        public B indexParam(IndexParam indexParam) {
+            try {
+                this.indexParams$value.add(indexParam);
+            }catch (UnsupportedOperationException _e){
+                this.indexParams$value = new ArrayList<>(this.indexParams$value);
+                this.indexParams$value.add(indexParam);
+            }
+            this.indexParams$set = true;
+            return self();
+        }
+    }
+
     @Data
     @SuperBuilder
     public static class CollectionSchema {
         @Builder.Default
         private List<CreateCollectionReq.FieldSchema> fieldSchemaList = new ArrayList<>();
 
-        public void addField(AddFieldReq addFieldReq) {
+        public CollectionSchema addField(AddFieldReq addFieldReq) {
             CreateCollectionReq.FieldSchema fieldSchema = FieldSchema.builder()
                     .name(addFieldReq.getFieldName())
                     .dataType(addFieldReq.getDataType())
@@ -102,6 +116,7 @@ public class CreateCollectionReq {
                 fieldSchema.setDimension(addFieldReq.getDimension());
             }
             fieldSchemaList.add(fieldSchema);
+            return this;
         }
 
         public CreateCollectionReq.FieldSchema getField(String fieldName) {

+ 1 - 1
src/test/java/io/milvus/v2/client/MilvusClientV2DockerTest.java

@@ -1200,10 +1200,10 @@ class MilvusClientV2DockerTest {
         Map<String, String> properties = new HashMap<>();
         properties.put(Constant.TTL_SECONDS, "10");
         properties.put(Constant.MMAP_ENABLED, "true");
-        properties.put("prop", "val");
         client.alterCollection(AlterCollectionReq.builder()
                 .collectionName(randomCollectionName)
                 .properties(properties)
+                .property("prop", "val")
                 .build());
         DescribeCollectionResp descCollResp = client.describeCollection(DescribeCollectionReq.builder()
                 .collectionName(randomCollectionName)

+ 26 - 3
src/test/java/io/milvus/v2/service/collection/CollectionTest.java

@@ -29,9 +29,13 @@ import io.milvus.v2.service.collection.response.ListCollectionsResp;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.testcontainers.shaded.org.checkerframework.checker.units.qual.A;
 
+import java.util.Arrays;
 import java.util.Collections;
 
+import static org.junit.Assert.assertEquals;
+
 class CollectionTest extends BaseTest {
     Logger logger = LoggerFactory.getLogger(CollectionTest.class);
 
@@ -54,20 +58,38 @@ class CollectionTest extends BaseTest {
 
         CreateCollectionReq.CollectionSchema collectionSchema = CreateCollectionReq.CollectionSchema.builder()
                 .build();
-        collectionSchema.addField(AddFieldReq.builder().fieldName("id").dataType(DataType.Int64).build());
-        collectionSchema.addField(AddFieldReq.builder().fieldName("vector").dataType(DataType.FloatVector).dimension(2).build());
+        collectionSchema
+                .addField(AddFieldReq.builder().fieldName("id").dataType(DataType.Int64).build())
+                .addField(AddFieldReq.builder().fieldName("vector").dataType(DataType.FloatVector).dimension(2).build())
+                .addField(AddFieldReq.builder().fieldName("description").dataType(DataType.VarChar).maxLength(64).build());
 
         IndexParam indexParam = IndexParam.builder()
                 .fieldName("vector")
                 .metricType(IndexParam.MetricType.L2)
                 .build();
+        IndexParam indexParam2 = IndexParam.builder()
+                .fieldName("description")
+                .indexType(IndexParam.IndexType.INVERTED)
+                .build();
+
 
         CreateCollectionReq request = CreateCollectionReq.builder()
                 .collectionName("test")
                 .collectionSchema(collectionSchema)
-                .indexParams(Collections.singletonList(indexParam))
+                .indexParams(Arrays.asList(indexParam, indexParam2))
+                .indexParam(IndexParam.builder() // fluent api, add index param
+                        .fieldName("id")
+                        .indexType(IndexParam.IndexType.INVERTED)
+                        .build()
+                )
                 .build();
         client_v2.createCollection(request);
+
+        AlterCollectionReq req = AlterCollectionReq.builder()
+                .collectionName("test")
+                .property("prop", "val")
+                .build();
+        assertEquals("val", req.getProperties().get("prop"));
     }
 
     @Test
@@ -138,4 +160,5 @@ class CollectionTest extends BaseTest {
                 .build();
         GetCollectionStatsResp resp = client_v2.getCollectionStats(req);
     }
+
 }