From 0c42383897060cc9318f0b3012f539110ca5d5a3 Mon Sep 17 00:00:00 2001 From: lentitude2tk Date: Wed, 30 Apr 2025 11:52:40 +0800 Subject: [PATCH] optim index interface support db Signed-off-by: lentitude2tk --- pom.xml | 1 + .../milvus/v2/service/index/IndexService.java | 26 ++++++++++++------- .../index/request/DescribeIndexReq.java | 1 + .../java/io/milvus/v2/utils/SchemaUtils.java | 5 ++++ 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index a26216892..2a8f91d72 100644 --- a/pom.xml +++ b/pom.xml @@ -48,6 +48,7 @@ http://www.milvus.io + sdk-core sdk-bulkwriter diff --git a/sdk-core/src/main/java/io/milvus/v2/service/index/IndexService.java b/sdk-core/src/main/java/io/milvus/v2/service/index/IndexService.java index 979d0b87c..51d41f45c 100644 --- a/sdk-core/src/main/java/io/milvus/v2/service/index/IndexService.java +++ b/sdk-core/src/main/java/io/milvus/v2/service/index/IndexService.java @@ -80,7 +80,7 @@ public Void createIndex(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub Status status = blockingStub.createIndex(builder.build()); rpcUtils.handleResponse(title, status); if (request.getSync()) { - WaitForIndexComplete(blockingStub, request.getCollectionName(), indexParam.getFieldName(), + WaitForIndexComplete(blockingStub, request.getDatabaseName(), request.getCollectionName(), indexParam.getFieldName(), indexParam.getIndexName(), request.getTimeout()); } } @@ -143,15 +143,17 @@ public Void dropIndexProperties(MilvusServiceGrpc.MilvusServiceBlockingStub bloc } public DescribeIndexResp describeIndex(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, DescribeIndexReq request) { - String title = String.format("DescribeIndexRequest collectionName:%s, fieldName:%s, indexName:%s", - request.getCollectionName(), request.getFieldName(), request.getIndexName()); - DescribeIndexRequest describeIndexRequest = DescribeIndexRequest.newBuilder() + String title = String.format("DescribeIndexRequest databaseName:%s collectionName:%s, fieldName:%s, indexName:%s", + request.getDatabaseName(), request.getCollectionName(), request.getFieldName(), request.getIndexName()); + DescribeIndexRequest.Builder builder = DescribeIndexRequest.newBuilder() .setCollectionName(request.getCollectionName()) .setFieldName(request.getFieldName() == null ? "" : request.getFieldName()) - .setIndexName(request.getIndexName() == null ? "" : request.getIndexName()) - .build(); + .setIndexName(request.getIndexName() == null ? "" : request.getIndexName()); + if (StringUtils.isNotEmpty(request.getDatabaseName())) { + builder.setDbName(request.getDatabaseName()); + } - DescribeIndexResponse response = blockingStub.describeIndex(describeIndexRequest); + DescribeIndexResponse response = blockingStub.describeIndex(builder.build()); rpcUtils.handleResponse(title, response.getStatus()); List indexs = response.getIndexDescriptionsList().stream().filter(index -> index.getIndexName().equals(request.getIndexName()) || index.getFieldName().equals(request.getFieldName())).collect(Collectors.toList()); if (indexs.isEmpty()) { @@ -187,7 +189,7 @@ public List listIndexes(MilvusServiceGrpc.MilvusServiceBlockingStub bloc } private void WaitForIndexComplete(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, - String collectionName, String fieldName, String indexName, long timeoutMs) { + String databaseName, String collectionName, String fieldName, String indexName, long timeoutMs) { long startTime = System.currentTimeMillis(); // Capture start time/ Timeout in milliseconds (60 seconds) // alloc a timestamp from the server, the DescribeIndex() will use this timestamp to check the segments @@ -197,12 +199,16 @@ private void WaitForIndexComplete(MilvusServiceGrpc.MilvusServiceBlockingStub bl long serverTs = allocTsResp.getTimestamp(); while (true) { - DescribeIndexResp response = describeIndex(blockingStub, DescribeIndexReq.builder() + DescribeIndexReq describeIndexReq = DescribeIndexReq.builder() .collectionName(collectionName) .fieldName(fieldName) .indexName(indexName) .timestamp(serverTs) - .build()); + .build(); + if (StringUtils.isNotEmpty(databaseName)) { + describeIndexReq.setDatabaseName(databaseName); + } + DescribeIndexResp response = describeIndex(blockingStub, describeIndexReq); List indices = response.getIndexDescriptions(); DescribeIndexResp.IndexDesc desc = null; if (indices.size() == 1) { diff --git a/sdk-core/src/main/java/io/milvus/v2/service/index/request/DescribeIndexReq.java b/sdk-core/src/main/java/io/milvus/v2/service/index/request/DescribeIndexReq.java index 5e599d8a2..a604d35c8 100644 --- a/sdk-core/src/main/java/io/milvus/v2/service/index/request/DescribeIndexReq.java +++ b/sdk-core/src/main/java/io/milvus/v2/service/index/request/DescribeIndexReq.java @@ -27,6 +27,7 @@ @Data @SuperBuilder public class DescribeIndexReq { + private String databaseName; @NonNull private String collectionName; private String fieldName; diff --git a/sdk-core/src/main/java/io/milvus/v2/utils/SchemaUtils.java b/sdk-core/src/main/java/io/milvus/v2/utils/SchemaUtils.java index 4f004fe71..a46c00ff6 100644 --- a/sdk-core/src/main/java/io/milvus/v2/utils/SchemaUtils.java +++ b/sdk-core/src/main/java/io/milvus/v2/utils/SchemaUtils.java @@ -164,6 +164,8 @@ private static CreateCollectionReq.FieldSchema convertFromGrpcFieldSchema(FieldS .isNullable(fieldSchema.getNullable()) .defaultValue(ParamUtils.valueFieldToObject(fieldSchema.getDefaultValue(), fieldSchema.getDataType())) .build(); + + Map typeParams = new HashMap<>(); for (KeyValuePair keyValuePair : fieldSchema.getTypeParamsList()) { if(keyValuePair.getKey().equals("dim")){ schema.setDimension(Integer.parseInt(keyValuePair.getValue())); @@ -179,7 +181,10 @@ private static CreateCollectionReq.FieldSchema convertFromGrpcFieldSchema(FieldS Map params = JsonUtils.fromJson(keyValuePair.getValue(), new TypeToken>() {}.getType()); schema.setAnalyzerParams(params); } + // To maintain compatibility with clientV1, the typeParams here will be returned in their original format. + typeParams.put(keyValuePair.getKey(), keyValuePair.getValue()); } + schema.setTypeParams(typeParams); return schema; }