Open mmahao opened 1 month ago
这块的话因为我是delete操作,并不是insert,所以return R.success(DeleteResponse.builder().deleteIds(resultWrapper.getInsertIDs()).build());是不是调用错方法了。
MilvusClient里有两个delete接口:
R
上面那个是原生的,下面那个是包了一层的所谓高级接口。 实际上你调用这个高级的delete时,内部那个原生的delete是成功返回了的。而当这个高级接口包装一个DeleteResponse返回的时候,是通过MutationResultWrapper.getInsertIDs()想拿id,实际上原生的delete接口并不返回被删除的id,所以这里就会抛出那个"No found insertIds, please check your requests" https://github.com/milvus-io/milvus-sdk-java/blob/3e8c58f7b2a3e314a8f3b8644ef3cb4b2bedf418/src/main/java/io/milvus/response/MutationResultWrapper.java#L69
我的建议是用原生的delete 接口。要知道的是,delete是个异步操作,当你发送一堆id过去之后,server端只是把delete request推送到pulsar就返回,所以客户端delete接口返回时并不知道到底有多少数据会被删除。所以只要那个R
R<MutationResult> deleteR = milvusClient.delete(DeleteParam.newBuilder()
.withCollectionName(COLLECTION_NAME)
.withExpr(ID_FIELD + "==1")
.build());
if (deleteR.getStatus() != R.Status.Success.getCode()) {
throw new RuntimeException("Failed to delete! Error: " + insertRet.getMessage());
}
还有个问题,向量库里面没有数据的时候,最后返回的删除count还是1,这个不确定是bug还是原本的设计。
我这边准备直接手动调用String expr = VectorUtils.convertPksExpr(requestParam.getPrimaryIds(), wrapper);
最后就不调用resultWrapper.getInsertIDs()
了,这样应该就ok了
解决了,放弃String expr = VectorUtils.convertPksExpr(requestParam.getPrimaryIds(), wrapper);
用
delete()返回的那个delete count没有什么用,server端只是简单地把要删除的id统计一下返回给客户端。实际真正删除了多少,在返回的时候是不知道的,因为是异步执行。
java的sdk,版本2.2.13
![]()
![]()
这块调用的时候,有点问题 1.当向量库里面有数据的时候,数据是删掉了,但是报错:No found insertIds, please check your requests 2.当向量库里面没有数据的时候,返回的delCount也是1,也是报错:No found insertIds, please check your requests
这个问题,不知道是不是因为bug引起的,如果有什么好的解决办法,请提供一下,多谢🙏🙏🙏
目前都是deleteByID,为啥还要getID呢?Milvus本身也不知道删除了哪些ID的,你GetInsertID自然就会报错。
java的sdk,版本2.2.13
这块调用的时候,有点问题 1.当向量库里面有数据的时候,数据是删掉了,但是报错:No found insertIds, please check your requests 2.当向量库里面没有数据的时候,返回的delCount也是1,也是报错:No found insertIds, please check your requests
这个问题,不知道是不是因为bug引起的,如果有什么好的解决办法,请提供一下,多谢🙏🙏🙏