Browse Source

update default metricType to Cosine, and remove unnecessary call to reduce latency.

Signed-off-by: Nian Liu <nian.liu@zilliz.com>
Nian Liu 1 year ago
parent
commit
09f21c487e

+ 2 - 4
src/main/java/io/milvus/v2/service/collection/CollectionService.java

@@ -34,11 +34,11 @@ public class CollectionService extends BaseService {
 
         FieldSchema idSchema = FieldSchema.newBuilder()
                 .setName("id")
-                .setDataType(DataType.valueOf(request.getPrimaryFieldType().name()))
+                .setDataType(DataType.valueOf(request.getIdType().name()))
                 .setIsPrimaryKey(Boolean.TRUE)
                 .setAutoID(request.getAutoID())
                 .build();
-        if(request.getPrimaryFieldType().name().equals("VarChar") && request.getMaxLength() != null){
+        if (request.getIdType().name().equals("VarChar") && request.getMaxLength() != null) {
             idSchema = idSchema.toBuilder().addTypeParams(KeyValuePair.newBuilder().setKey("max_length").setValue(String.valueOf(request.getMaxLength())).build()).build();
         }
 
@@ -153,8 +153,6 @@ public class CollectionService extends BaseService {
     }
 
     public DescribeCollectionResp describeCollection(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, DescribeCollectionReq request) {
-        //check collection exists
-        checkCollectionExist(milvusServiceBlockingStub, request.getCollectionName());
 
         DescribeCollectionRequest describeCollectionRequest = DescribeCollectionRequest.newBuilder()
                 .setCollectionName(request.getCollectionName())

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

@@ -24,13 +24,13 @@ public class CreateCollectionReq {
     @Builder.Default
     private String primaryFieldName = "id";
     @Builder.Default
-    private DataType primaryFieldType = DataType.Int64;
+    private DataType idType = DataType.Int64;
     @Builder.Default
     private Integer maxLength = 65535;
     @Builder.Default
     private String vectorFieldName = "vector";
     @Builder.Default
-    private String metricType = IndexParam.MetricType.IP.name();
+    private String metricType = IndexParam.MetricType.COSINE.name();
     @Builder.Default
     private Boolean autoID = Boolean.FALSE;
 

+ 4 - 21
src/main/java/io/milvus/v2/service/vector/VectorService.java

@@ -9,8 +9,6 @@ import io.milvus.v2.service.collection.CollectionService;
 import io.milvus.v2.service.collection.request.DescribeCollectionReq;
 import io.milvus.v2.service.collection.response.DescribeCollectionResp;
 import io.milvus.v2.service.index.IndexService;
-import io.milvus.v2.service.index.request.DescribeIndexReq;
-import io.milvus.v2.service.index.response.DescribeIndexResp;
 import io.milvus.v2.service.vector.request.*;
 import io.milvus.v2.service.vector.response.*;
 import org.slf4j.Logger;
@@ -23,7 +21,7 @@ public class VectorService extends BaseService {
 
     public InsertResp insert(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, InsertReq request) {
         String title = String.format("InsertRequest collectionName:%s", request.getCollectionName());
-        checkCollectionExist(blockingStub, request.getCollectionName());
+
         DescribeCollectionRequest describeCollectionRequest = DescribeCollectionRequest.newBuilder()
                 .setCollectionName(request.getCollectionName()).build();
         DescribeCollectionResponse descResp = blockingStub.describeCollection(describeCollectionRequest);
@@ -38,8 +36,6 @@ public class VectorService extends BaseService {
     public UpsertResp upsert(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, UpsertReq request) {
         String title = String.format("UpsertRequest collectionName:%s", request.getCollectionName());
 
-        checkCollectionExist(milvusServiceBlockingStub, request.getCollectionName());
-
         DescribeCollectionRequest describeCollectionRequest = DescribeCollectionRequest.newBuilder()
                 .setCollectionName(request.getCollectionName()).build();
         DescribeCollectionResponse descResp = milvusServiceBlockingStub.describeCollection(describeCollectionRequest);
@@ -58,7 +54,7 @@ public class VectorService extends BaseService {
         } else if (request.getFilter() != null && request.getIds() != null) {
             throw new MilvusClientException(ErrorCode.INVALID_PARAMS, "filter and ids can't be set at the same time");
         }
-        checkCollectionExist(milvusServiceBlockingStub, request.getCollectionName());
+
         DescribeCollectionResp descR = collectionService.describeCollection(milvusServiceBlockingStub, DescribeCollectionReq.builder().collectionName(request.getCollectionName()).build());
 
         if (request.getIds() != null && request.getFilter() == null) {
@@ -76,21 +72,9 @@ public class VectorService extends BaseService {
     public SearchResp search(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, SearchReq request) {
         String title = String.format("SearchRequest collectionName:%s", request.getCollectionName());
 
-        checkCollectionExist(milvusServiceBlockingStub, request.getCollectionName());
-        DescribeCollectionResp descR = collectionService.describeCollection(milvusServiceBlockingStub, DescribeCollectionReq.builder().collectionName(request.getCollectionName()).build());
-        if (request.getVectorFieldName() == null) {
-            request.setVectorFieldName(descR.getVectorFieldName().get(0));
-        }
+        //checkCollectionExist(milvusServiceBlockingStub, request.getCollectionName());
 
-        DescribeIndexReq describeIndexReq = DescribeIndexReq.builder()
-                .collectionName(request.getCollectionName())
-                .fieldName(request.getVectorFieldName())
-                .build();
-        DescribeIndexResp respR = indexService.describeIndex(milvusServiceBlockingStub, describeIndexReq);
-        if (respR.getMetricType() == null) {
-            throw new MilvusClientException(ErrorCode.SERVER_ERROR, "metric type not found");
-        }
-        SearchRequest searchRequest = vectorUtils.ConvertToGrpcSearchRequest(respR.getMetricType(), request);
+        SearchRequest searchRequest = vectorUtils.ConvertToGrpcSearchRequest(request);
 
         SearchResults response = milvusServiceBlockingStub.search(searchRequest);
         rpcUtils.handleResponse(title, response.getStatus());
@@ -102,7 +86,6 @@ public class VectorService extends BaseService {
 
     public DeleteResp delete(MilvusServiceGrpc.MilvusServiceBlockingStub milvusServiceBlockingStub, DeleteReq request) {
         String title = String.format("DeleteRequest collectionName:%s", request.getCollectionName());
-        checkCollectionExist(milvusServiceBlockingStub, request.getCollectionName());
 
         if (request.getFilter() != null && request.getIds() != null) {
             throw new MilvusClientException(ErrorCode.INVALID_PARAMS, "filter and ids can't be set at the same time");

+ 2 - 1
src/main/java/io/milvus/v2/service/vector/request/SearchReq.java

@@ -16,7 +16,8 @@ public class SearchReq {
     private String collectionName;
     @Builder.Default
     private List<String> partitionNames = new ArrayList<>();
-    private String vectorFieldName;
+    @Builder.Default
+    private String annsField = "";
     private int topK;
     private String filter;
     @Builder.Default

+ 6 - 15
src/main/java/io/milvus/v2/utils/VectorUtils.java

@@ -8,7 +8,6 @@ import io.milvus.grpc.*;
 import io.milvus.param.Constant;
 import io.milvus.v2.service.vector.request.QueryReq;
 import io.milvus.v2.service.vector.request.SearchReq;
-import org.jetbrains.annotations.NotNull;
 
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
@@ -81,20 +80,13 @@ public class VectorUtils {
         return guaranteeTimestamp;
     }
 
-    public SearchRequest ConvertToGrpcSearchRequest(@NotNull String metricType, SearchReq request) {
+    public SearchRequest ConvertToGrpcSearchRequest(SearchReq request) {
         SearchRequest.Builder builder = SearchRequest.newBuilder()
-                .setDbName("")
                 .setCollectionName(request.getCollectionName());
         if (!request.getPartitionNames().isEmpty()) {
             request.getPartitionNames().forEach(builder::addPartitionNames);
         }
 
-        builder.addSearchParams(
-                KeyValuePair.newBuilder()
-                        .setKey(Constant.METRIC_TYPE)
-                        .setValue(metricType)
-                        .build());
-
 
         // prepare target vectors
         // TODO: check target vector dimension(use DescribeCollection get schema to compare)
@@ -136,13 +128,12 @@ public class VectorUtils {
 
         ByteString byteStr = placeholderGroup.toByteString();
         builder.setPlaceholderGroup(byteStr);
-        //builder.setNq(request.getNQ());
 
         // search parameters
         builder.addSearchParams(
                         KeyValuePair.newBuilder()
                                 .setKey(Constant.VECTOR_FIELD)
-                                .setValue(request.getVectorFieldName())
+                                .setValue(request.getAnnsField())
                                 .build())
                 .addSearchParams(
                         KeyValuePair.newBuilder()
@@ -158,14 +149,14 @@ public class VectorUtils {
                         KeyValuePair.newBuilder()
                                 .setKey(Constant.IGNORE_GROWING)
                                 .setValue(String.valueOf(request.isIgnoreGrowing()))
-                                .build());
-
-        builder.addSearchParams(
-                KeyValuePair.newBuilder()
+                                .build())
+                .addSearchParams(
+                        KeyValuePair.newBuilder()
                         .setKey(Constant.OFFSET)
                         .setValue(String.valueOf(request.getOffset()))
                         .build());
 
+
         if (null != request.getSearchParams()) {
             try {
                 Gson gson = new Gson();