Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 14 additions & 12 deletions sdk-core/src/main/java/io/milvus/v2/utils/DataUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,7 @@ private static FieldData genStructSubFieldData(CreateCollectionReq.FieldSchema f
FieldData.Builder builder = FieldData.newBuilder().setFieldName(fieldName);

if (ParamUtils.isVectorDataType(dataType)) {
VectorArray vectorArr = genVectorArray(dataType, objects);
VectorArray vectorArr = genVectorArray(dataType, objects, fieldSchema.getDimension());
if (vectorArr.getDim() > 0 && vectorArr.getDim() != fieldSchema.getDimension()) {
String msg = String.format("Dimension mismatch for field %s, expected: %d, actual: %d",
fieldName, fieldSchema.getDimension(), vectorArr.getDim());
Expand Down Expand Up @@ -380,8 +380,8 @@ private static FieldData genStructSubFieldData(CreateCollectionReq.FieldSchema f
}

@SuppressWarnings("unchecked")
public static VectorArray genVectorArray(DataType dataType, List<?> objects) {
VectorArray.Builder builder = VectorArray.newBuilder().setElementType(dataType);
public static VectorArray genVectorArray(DataType dataType, List<?> objects, int dim) {
VectorArray.Builder builder = VectorArray.newBuilder().setElementType(dataType).setDim(dim);
switch (dataType) {
case FloatVector:
case BinaryVector:
Expand All @@ -398,19 +398,21 @@ public static VectorArray genVectorArray(DataType dataType, List<?> objects) {
List<?> listOfList = (List<?>) object;
if (listOfList.isEmpty()) {
// struct field value is empty, fill the VectorArray with zero-dim vectors?
builder.addData(VectorField.newBuilder().build());
VectorField.Builder vfBuilder = VectorField.newBuilder().setDim(dim);
if (dataType == DataType.FloatVector) {
vfBuilder.setFloatVector(FloatArray.newBuilder().build());
} else {
// not supported yet
throw new MilvusClientException(ErrorCode.INVALID_PARAMS, "Unsupported type: " + dataType.name());
}
builder.addData(vfBuilder.build());
continue;
}

VectorField vf = ParamUtils.genVectorField(dataType, listOfList);
if (vf.getDim() == 0) {
throw new MilvusClientException(ErrorCode.INVALID_PARAMS, "Vector cannot be empty list");
}
if (builder.getDataCount() == 0) {
builder.setDim(vf.getDim());
} else if (builder.getDim() != vf.getDim()) {
String msg = String.format("Dimension mismatch for vector field, the first dimension: %d, mismatched: %d",
builder.getDim(), vf.getDim());
if (vf.getDim() != dim) {
String msg = String.format("Dimension mismatch for vector field, schema dimension: %d, actual dimension: %d",
dim, vf.getDim());
throw new MilvusClientException(ErrorCode.INVALID_PARAMS, msg);
}
builder.addData(vf);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1282,7 +1282,7 @@ void testStruct() {
row.add(normalVectorField, JsonUtils.toJsonTree(utils.generateFloatVector()));
JsonArray structArr1 = new JsonArray();
JsonArray structArr2 = new JsonArray();
for (int k = 0; k < 8; k++) {
for (int k = 0; k < i; k++) {
if (k < 5) {
JsonObject struct = new JsonObject();
struct.addProperty("aaa", "No." + k);
Expand All @@ -1308,7 +1308,7 @@ void testStruct() {

// upsert
JsonObject row = new JsonObject();
row.addProperty(pkField, 6);
row.addProperty(pkField, 0);
row.addProperty(normalScalarField, "update_text");
row.add(normalVectorField, JsonUtils.toJsonTree(utils.generateFloatVector()));
JsonArray structArr1 = new JsonArray();
Expand All @@ -1318,11 +1318,6 @@ void testStruct() {
struct1.addProperty("aaa", "updated_No." + k);
struct1.add("vector", JsonUtils.toJsonTree(utils.generateFloatVector(32)));
structArr1.add(struct1);

JsonObject struct2 = new JsonObject();
struct2.addProperty("bbb", "updated_No." + k);
struct2.add("vector", JsonUtils.toJsonTree(utils.generateFloatVector(64)));
structArr2.add(struct2);
}
row.add("st1", structArr1);
row.add("st2", structArr2);
Expand All @@ -1336,7 +1331,7 @@ void testStruct() {
// query
QueryResp queryResp = client.query(QueryReq.builder()
.collectionName(randomCollectionName)
.filter(String.format("%s == 6 or %s == 9", pkField, pkField))
.filter(String.format("%s == 0 or %s == 9", pkField, pkField))
.limit(3)
.consistencyLevel(ConsistencyLevel.STRONG)
.outputFields(Collections.singletonList("*"))
Expand Down Expand Up @@ -1376,7 +1371,7 @@ void testStruct() {
for (List<SearchResp.SearchResult> oneResults : searchResults) {
Assertions.assertEquals(topK, oneResults.size());
}
Assertions.assertEquals(6L, (long) searchResults.get(0).get(0).getId());
Assertions.assertEquals(0L, (long) searchResults.get(0).get(0).getId());
Assertions.assertEquals(9L, (long) searchResults.get(1).get(0).getId());
}

Expand Down
Loading