Skip to content

Commit edab1da

Browse files
committed
New metric type for struct vectors
Signed-off-by: yhmo <yihua.mo@zilliz.com>
1 parent 1f069f5 commit edab1da

4 files changed

Lines changed: 28 additions & 13 deletions

File tree

docker-compose.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ version: '3.5'
33
services:
44
standalone:
55
container_name: milvus-javasdk-standalone-1
6-
image: milvusdb/milvus:master-20250929-ca1cc7c9-amd64
6+
image: milvusdb/milvus:master-20251011-faaf2159-amd64
77
command: [ "milvus", "run", "standalone" ]
88
environment:
99
- COMMON_STORAGETYPE=local
@@ -24,7 +24,7 @@ services:
2424

2525
standaloneslave:
2626
container_name: milvus-javasdk-standalone-2
27-
image: milvusdb/milvus:master-20250929-ca1cc7c9-amd64
27+
image: milvusdb/milvus:master-20251011-faaf2159-amd64
2828
command: [ "milvus", "run", "standalone" ]
2929
environment:
3030
- COMMON_STORAGETYPE=local

sdk-core/src/main/java/io/milvus/v2/common/IndexParam.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,14 @@ public enum MetricType {
5353
// Only for sparse vector with BM25
5454
BM25,
5555

56-
// Only for struct vector
57-
MAX_SIM,
56+
// Only for float vector inside struct
57+
MAX_SIM, // equal to MAX_SIM_COSINE
58+
MAX_SIM_COSINE,
59+
MAX_SIM_IP,
60+
MAX_SIM_L2,
61+
// Only for binary vector inside struct
62+
MAX_SIM_JACCARD,
63+
MAX_SIM_HAMMING,
5864
;
5965
}
6066

@@ -105,9 +111,6 @@ public enum IndexType {
105111
// From Milvus 2.5.4 onward, SPARSE_WAND is being deprecated. Instead, it is recommended to
106112
// use "inverted_index_algo": "DAAT_WAND" for equivalency while maintaining compatibility.
107113
SPARSE_WAND(301),
108-
109-
// Only for struct vector
110-
EMB_LIST_HNSW(401),
111114
;
112115

113116
private final String name;

sdk-core/src/test/java/io/milvus/TestUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class TestUtils {
1111
private int dimension = 256;
1212
private static final Random RANDOM = new Random();
1313

14-
public static final String MilvusDockerImageID = "milvusdb/milvus:master-20250929-ca1cc7c9-amd64";
14+
public static final String MilvusDockerImageID = "milvusdb/milvus:master-20251011-faaf2159-amd64";
1515

1616
public TestUtils(int dimension) {
1717
this.dimension = dimension;

sdk-core/src/test/java/io/milvus/v2/client/MilvusClientV2DockerTest.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,6 +1028,7 @@ void testStruct() {
10281028
String structField = "clips";
10291029
String structScalarField = "desc";
10301030
String structVectorField = "clip";
1031+
String structBinVectorField = "clip_bin";
10311032
int structCapacity = 300;
10321033
int varcharLength = 100;
10331034
CreateCollectionReq.CollectionSchema collectionSchema = CreateCollectionReq.CollectionSchema.builder()
@@ -1065,6 +1066,12 @@ void testStruct() {
10651066
.dataType(DataType.FloatVector)
10661067
.dimension(DIMENSION)
10671068
.build())
1069+
.addStructField(AddFieldReq.builder()
1070+
.fieldName(structBinVectorField)
1071+
.description("dummy")
1072+
.dataType(DataType.BinaryVector)
1073+
.dimension(DIMENSION)
1074+
.build())
10681075
.build());
10691076

10701077
client.dropCollection(DropCollectionReq.builder()
@@ -1084,9 +1091,14 @@ void testStruct() {
10841091
.metricType(IndexParam.MetricType.COSINE)
10851092
.build());
10861093
indexParams.add(IndexParam.builder()
1087-
.fieldName(structVectorField)
1088-
.indexType(IndexParam.IndexType.EMB_LIST_HNSW)
1089-
.metricType(IndexParam.MetricType.MAX_SIM)
1094+
.fieldName("clips[clip]")
1095+
.indexType(IndexParam.IndexType.HNSW)
1096+
.metricType(IndexParam.MetricType.MAX_SIM_L2)
1097+
.build());
1098+
indexParams.add(IndexParam.builder()
1099+
.fieldName("clips[clip_bin]")
1100+
.indexType(IndexParam.IndexType.BIN_IVF_FLAT)
1101+
.metricType(IndexParam.MetricType.MAX_SIM_HAMMING)
10901102
.build());
10911103
client.createIndex(CreateIndexReq.builder()
10921104
.collectionName(randomCollectionName)
@@ -1128,8 +1140,8 @@ void testStruct() {
11281140
.build());
11291141
Assertions.assertEquals(1, indexDesc.getIndexDescriptions().size());
11301142
DescribeIndexResp.IndexDesc desc = indexDesc.getIndexDescriptions().get(0);
1131-
Assertions.assertEquals(IndexParam.IndexType.EMB_LIST_HNSW, desc.getIndexType());
1132-
Assertions.assertEquals(IndexParam.MetricType.MAX_SIM, desc.getMetricType());
1143+
Assertions.assertEquals(IndexParam.IndexType.HNSW, desc.getIndexType());
1144+
Assertions.assertEquals(IndexParam.MetricType.MAX_SIM_COSINE, desc.getMetricType());
11331145

11341146
// insert
11351147
List<JsonObject> rows = new ArrayList<>();

0 commit comments

Comments
 (0)