瀏覽代碼

fix client-v2 error (#1303)

Signed-off-by: lentitude2tk <xushuang.hu@zilliz.com>
xushuang.hu 2 月之前
父節點
當前提交
86eb131105

+ 9 - 0
sdk-core/src/main/java/io/milvus/v2/common/DataType.java

@@ -21,6 +21,8 @@ package io.milvus.v2.common;
 
 import lombok.Getter;
 
+import java.util.Arrays;
+
 @Getter
 public enum DataType {
     None(0),
@@ -49,4 +51,11 @@ public enum DataType {
         this.code = code;
     }
     ;
+
+    public static DataType forNumber(int code) {
+        return Arrays.stream(DataType.values())
+                .filter(dataType -> dataType.code == code)
+                .findFirst()
+                .orElse(null);
+    }
 }

+ 13 - 5
sdk-core/src/main/java/io/milvus/v2/service/collection/CollectionService.java

@@ -77,14 +77,17 @@ public class CollectionService extends BaseService {
                 .setEnableDynamicField(request.getEnableDynamicField())
                 .build();
 
-        CreateCollectionRequest createCollectionRequest = CreateCollectionRequest.newBuilder()
+        CreateCollectionRequest.Builder builder = CreateCollectionRequest.newBuilder()
                 .setCollectionName(request.getCollectionName())
                 .setSchema(schema.toByteString())
                 .setShardsNum(request.getNumShards())
-                .setConsistencyLevelValue(request.getConsistencyLevel().getCode())
-                .build();
+                .setConsistencyLevelValue(request.getConsistencyLevel().getCode());
+
+        if (StringUtils.isNotEmpty(request.getDatabaseName())) {
+            builder.setDbName(request.getDatabaseName());
+        }
 
-        Status status = blockingStub.createCollection(createCollectionRequest);
+        Status status = blockingStub.createCollection(builder.build());
         rpcUtils.handleResponse(title, status);
 
         //create index
@@ -132,7 +135,12 @@ public class CollectionService extends BaseService {
         CreateCollectionRequest.Builder builder = CreateCollectionRequest.newBuilder()
                 .setCollectionName(request.getCollectionName())
                 .setSchema(grpcSchemaBuilder.build().toByteString())
-                .setShardsNum(request.getNumShards());
+                .setShardsNum(request.getNumShards())
+                .setConsistencyLevelValue(request.getConsistencyLevel().getCode());
+        if (StringUtils.isNotEmpty(request.getDatabaseName())) {
+            builder.setDbName(request.getDatabaseName());
+        }
+
         List<KeyValuePair> propertiesList = ParamUtils.AssembleKvPair(request.getProperties());
         if (CollectionUtils.isNotEmpty(propertiesList)) {
             propertiesList.forEach(builder::addProperties);

+ 3 - 0
sdk-core/src/main/java/io/milvus/v2/service/collection/request/AddFieldReq.java

@@ -56,6 +56,9 @@ public class AddFieldReq {
     Map<String, Object> analyzerParams; // for BM25 tokenizer
     private Boolean enableMatch; // for BM25 keyword search
 
+    // If a specific field, such as maxLength, has been specified, it will override the corresponding key's value in typeParams.
+    private Map<String, String> typeParams;
+
     AddFieldReq setDefaultValue(Object obj) {
         enableDefaultValue = true; // automatically set this flag
         this.defaultValue = obj;

+ 5 - 0
sdk-core/src/main/java/io/milvus/v2/service/collection/request/CreateCollectionReq.java

@@ -38,6 +38,7 @@ import java.util.Map;
 @Data
 @SuperBuilder
 public class CreateCollectionReq {
+    private String databaseName;
     @NonNull
     private String collectionName;
     @Builder.Default
@@ -154,6 +155,7 @@ public class CreateCollectionReq {
                     .enableAnalyzer(addFieldReq.getEnableAnalyzer())
                     .enableMatch(addFieldReq.getEnableMatch())
                     .analyzerParams(addFieldReq.getAnalyzerParams())
+                    .typeParams(addFieldReq.getTypeParams())
                     .build();
             if (addFieldReq.getDataType().equals(DataType.Array)) {
                 if (addFieldReq.getElementType() == null) {
@@ -216,6 +218,9 @@ public class CreateCollectionReq {
         private Boolean enableAnalyzer; // for BM25 tokenizer
         Map<String, Object> analyzerParams; // for BM25 tokenizer
         private Boolean enableMatch; // for BM25 keyword search
+
+        // If a specific field, such as maxLength, has been specified, it will override the corresponding key's value in typeParams.
+        private Map<String, String> typeParams;
     }
 
     @Data

+ 5 - 0
sdk-core/src/main/java/io/milvus/v2/service/index/IndexService.java

@@ -51,6 +51,11 @@ public class IndexService extends BaseService {
                             .setKey(Constant.INDEX_TYPE)
                             .setValue(indexParam.getIndexType().getName())
                             .build());
+
+            if (StringUtils.isNotEmpty(request.getDatabaseName())) {
+                builder.setDbName(request.getDatabaseName());
+            }
+
             if(indexParam.getMetricType()!= null){
                 // only vector field has a metric type
                 builder.addExtraParams(KeyValuePair.newBuilder()

+ 1 - 0
sdk-core/src/main/java/io/milvus/v2/service/index/request/CreateIndexReq.java

@@ -29,6 +29,7 @@ import java.util.List;
 @Data
 @SuperBuilder
 public class CreateIndexReq {
+    private String databaseName;
     @NonNull
     private String collectionName;
     private List<IndexParam> indexParams;

+ 31 - 9
sdk-core/src/main/java/io/milvus/v2/utils/SchemaUtils.java

@@ -21,16 +21,28 @@ package io.milvus.v2.utils;
 
 import com.google.gson.reflect.TypeToken;
 import io.milvus.common.utils.JsonUtils;
-import io.milvus.grpc.*;
+import io.milvus.grpc.CollectionSchema;
+import io.milvus.grpc.DataType;
+import io.milvus.grpc.FieldSchema;
+import io.milvus.grpc.FunctionSchema;
+import io.milvus.grpc.FunctionType;
+import io.milvus.grpc.KeyValuePair;
+import io.milvus.grpc.ValueField;
 import io.milvus.param.ParamUtils;
 import io.milvus.v2.exception.ErrorCode;
 import io.milvus.v2.exception.MilvusClientException;
 import io.milvus.v2.service.collection.request.CreateCollectionReq;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
+import static io.milvus.param.ParamUtils.AssembleKvPair;
+
 public class SchemaUtils {
     public static void checkNullEmptyString(String target, String title) {
         if (target == null || StringUtils.isBlank(target)) {
@@ -62,32 +74,42 @@ public class SchemaUtils {
             }
         }
 
+        // assemble typeParams for FieldSchema
+        Map<String, String> typeParams = fieldSchema.getTypeParams() == null ? new HashMap<>() : fieldSchema.getTypeParams();
         if(fieldSchema.getDimension() != null){
-            builder.addTypeParams(KeyValuePair.newBuilder().setKey("dim").setValue(String.valueOf(fieldSchema.getDimension())).build()).build();
+            typeParams.put("dim", String.valueOf(fieldSchema.getDimension()));
         }
 //        if (Objects.equals(fieldSchema.getName(), partitionKeyField)) {
 //            schema = schema.toBuilder().setIsPartitionKey(Boolean.TRUE).build();
 //        }
         if(fieldSchema.getDataType() == io.milvus.v2.common.DataType.VarChar && fieldSchema.getMaxLength() != null){
-            builder.addTypeParams(KeyValuePair.newBuilder().setKey("max_length").setValue(String.valueOf(fieldSchema.getMaxLength())).build()).build();
+            typeParams.put("max_length", String.valueOf(fieldSchema.getMaxLength()));
         }
         if (fieldSchema.getDataType() == io.milvus.v2.common.DataType.Array) {
-            builder.addTypeParams(KeyValuePair.newBuilder().setKey("max_capacity").setValue(String.valueOf(fieldSchema.getMaxCapacity())).build()).build();
             builder.setElementType(DataType.valueOf(fieldSchema.getElementType().name())).build();
+            if (fieldSchema.getMaxCapacity() != null) {
+                typeParams.put("max_capacity", String.valueOf(fieldSchema.getMaxCapacity()));
+            }
+
             if (fieldSchema.getElementType() == io.milvus.v2.common.DataType.VarChar && fieldSchema.getMaxLength() != null) {
-                builder.addTypeParams(KeyValuePair.newBuilder().setKey("max_length").setValue(String.valueOf(fieldSchema.getMaxLength())).build()).build();
+                typeParams.put("max_length", String.valueOf(fieldSchema.getMaxLength()));
             }
         }
 
         if (fieldSchema.getEnableAnalyzer() != null) {
-            builder.addTypeParams(KeyValuePair.newBuilder().setKey("enable_analyzer").setValue(String.valueOf(fieldSchema.getEnableAnalyzer())).build()).build();
+            typeParams.put("enable_analyzer", String.valueOf(fieldSchema.getEnableAnalyzer()));
         }
         if (fieldSchema.getEnableMatch() != null) {
-            builder.addTypeParams(KeyValuePair.newBuilder().setKey("enable_match").setValue(String.valueOf(fieldSchema.getEnableMatch())).build()).build();
+            typeParams.put("enable_match", String.valueOf(fieldSchema.getEnableMatch()));
         }
         if (fieldSchema.getAnalyzerParams() != null) {
             String params = JsonUtils.toJson(fieldSchema.getAnalyzerParams());
-            builder.addTypeParams(KeyValuePair.newBuilder().setKey("analyzer_params").setValue(params).build()).build();
+            typeParams.put("analyzer_params", params);
+        }
+
+        List<KeyValuePair> typeParamsList = AssembleKvPair(typeParams);
+        if (CollectionUtils.isNotEmpty(typeParamsList)) {
+            typeParamsList.forEach(builder::addTypeParams);
         }
         return builder.build();
     }