[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
yongpengli-z commented
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;
}
nianliuu commented
fixed