milvus-io/milvus-sdk-java

[V2]--Upsert Error: error code: 2, reason: the number of fields is less than needed: invalid parameter[expected=9][actual=8]

Closed this issue · 1 comments

java-sdk: V2
Insert succeed,upsert failed using the same json data.

Test steps:

/* create collection */
 newCollectionName = CommonFunction.createNewCollection(CommonData.dim, null);
/* insert data */
 List<JSONObject> jsonObjects = CommonFunction.generateDefaultData(CommonData.numberEntities, CommonData.dim);
 milvusClientV2.insert(InsertReq.builder().collectionName(newCollectionName).data(jsonObjects).build());
/* upsert */
 UpsertResp upsert = milvusClientV2.upsert(UpsertReq.builder()
                .collectionName(newCollectionName)
                .data(jsonObjects)
                .build());

create collection:

public static String createNewCollection(int dim,String collectionName) {
        if(collectionName==null){
            collectionName = "Collection_" + GenerateUtil.getRandomString(10);
        }
        CreateCollectionReq.FieldSchema fieldInt64=CreateCollectionReq.FieldSchema.builder()
                .autoID(false)
                .dataType(io.milvus.v2.common.DataType.Int64)
                .isPrimaryKey(true)
                .name(CommonData.fieldInt64)
                .build();
        CreateCollectionReq.FieldSchema fieldInt32=CreateCollectionReq.FieldSchema.builder()
                .dataType(DataType.Int32)
                .name(CommonData.fieldInt32)
                .isPrimaryKey(false)
                .build();
        CreateCollectionReq.FieldSchema fieldDouble=CreateCollectionReq.FieldSchema.builder()
                .dataType(DataType.Double)
                .name(CommonData.fieldDouble)
                .isPrimaryKey(false)
                .build();
        CreateCollectionReq.FieldSchema fieldArray=CreateCollectionReq.FieldSchema.builder()
                .dataType(DataType.Array)
                .name(CommonData.fieldArray)
                .elementType(DataType.Int64)
                .maxCapacity(1000)
                .isPrimaryKey(false)
                .build();
        CreateCollectionReq.FieldSchema fieldBool=CreateCollectionReq.FieldSchema.builder()
                .dataType(DataType.Bool)
                .name(CommonData.fieldBool)
                .isPrimaryKey(false)
                .build();
        CreateCollectionReq.FieldSchema fieldVarchar=CreateCollectionReq.FieldSchema.builder()
                .dataType(DataType.VarChar)
                .name(CommonData.fieldVarchar)
                .isPrimaryKey(false)
                .maxLength(1000)
                .build();
        CreateCollectionReq.FieldSchema fieldFloat=CreateCollectionReq.FieldSchema.builder()
                .dataType(DataType.Float)
                .name(CommonData.fieldFloat)
                .isPrimaryKey(false)
                .build();
        CreateCollectionReq.FieldSchema fieldJson=CreateCollectionReq.FieldSchema.builder()
                .dataType(DataType.JSON)
                .name(CommonData.fieldJson)
                .isPrimaryKey(false)
                .build();
        CreateCollectionReq.FieldSchema fieldFloatVector=CreateCollectionReq.FieldSchema.builder()
                .dataType(DataType.FloatVector)
                .name(CommonData.fieldFloatVector)
                .isPrimaryKey(false)
                .dimension(dim)
                .build();

        List<CreateCollectionReq.FieldSchema> fieldSchemaList=new ArrayList<>();
        fieldSchemaList.add(fieldInt64);
        fieldSchemaList.add(fieldInt32);
        fieldSchemaList.add(fieldFloat);
        fieldSchemaList.add(fieldDouble);
        fieldSchemaList.add(fieldArray);
        fieldSchemaList.add(fieldBool);
        fieldSchemaList.add(fieldJson);
        fieldSchemaList.add(fieldVarchar);
        fieldSchemaList.add(fieldFloatVector);
        CreateCollectionReq.CollectionSchema collectionSchema= CreateCollectionReq.CollectionSchema.builder()
                .fieldSchemaList(fieldSchemaList)
                .description("Auto test collection")
                .enableDynamicField(false)
                .build();
        CreateCollectionReq createCollectionReq = CreateCollectionReq.builder()
                .collectionSchema(collectionSchema)
                .collectionName(collectionName)
                .enableDynamicField(false)
                .build();
        BaseTest.milvusClientV2.createCollection(createCollectionReq);
        log.info("create collection:" + collectionName);
        return collectionName;
    }

generate data:

 public static List<JSONObject> generateDefaultData(long num,int dim){
        List<JSONObject> jsonList=new ArrayList<>();
        Random ran = new Random();
        for (long i = 0; i < num; i++) {
            JSONObject row=new JSONObject();
            row.put(CommonData.fieldInt64,i);
            row.put(CommonData.fieldInt32,(int)i);
            row.put(CommonData.fieldDouble,(double)i);
            row.put(CommonData.fieldArray, Arrays.asList(i,i+1,i+2));
            row.put(CommonData.fieldBool, i % 2 == 0);
            row.put(CommonData.fieldVarchar,"Str"+i);
            row.put(CommonData.fieldFloat,(float)i);
            List<Float> vector=new ArrayList<>();
            for (int k = 0; k < dim; ++k) {
                vector.add(ran.nextFloat());
            }
            row.put(CommonData.fieldFloatVector,vector);
            JSONObject json = new JSONObject();
            json.put(CommonData.fieldInt64,i);
            json.put(CommonData.fieldInt32,(int)i);
            json.put(CommonData.fieldDouble,(double)i);
            json.put(CommonData.fieldArray, Arrays.asList(i,i+1,i+2));
            json.put(CommonData.fieldBool, i % 2 == 0);
            json.put(CommonData.fieldVarchar,"Str"+i);
            json.put(CommonData.fieldFloat,(float)i);
            row.put(CommonData.fieldJson,json);
            jsonList.add(row);
        }
        return jsonList;
    }

fixed