milvus-io/milvus-sdk-java

No found insertIds, please check your requests

Opened this issue · 7 comments

java的sdk,版本2.2.13

image
image
image

这块调用的时候,有点问题
1.当向量库里面有数据的时候,数据是删掉了,但是报错:No found insertIds, please check your requests
2.当向量库里面没有数据的时候,返回的delCount也是1,也是报错:No found insertIds, please check your requests

这个问题,不知道是不是因为bug引起的,如果有什么好的解决办法,请提供一下,多谢🙏🙏🙏

这块的话因为我是delete操作,并不是insert,所以return R.success(DeleteResponse.builder().deleteIds(resultWrapper.getInsertIDs()).build());是不是调用错方法了。

yhmo commented

MilvusClient里有两个delete接口:
R delete(@nonnull DeleteParam requestParam)
R delete(DeleteIdsParam requestParam)

上面那个是原生的,下面那个是包了一层的所谓高级接口。
实际上你调用这个高级的delete时,内部那个原生的delete是成功返回了的。而当这个高级接口包装一个DeleteResponse返回的时候,是通过MutationResultWrapper.getInsertIDs()想拿id,实际上原生的delete接口并不返回被删除的id,所以这里就会抛出那个"No found insertIds, please check your requests"

throw new ParamException("No found insertIds, please check your requests");

我的建议是用原生的delete 接口。要知道的是,delete是个异步操作,当你发送一堆id过去之后,server端只是把delete request推送到pulsar就返回,所以客户端delete接口返回时并不知道到底有多少数据会被删除。所以只要那个R返回SUCCESS就可以认为delete请求以被server端接受,后面会异步处理。

         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);


image

yhmo commented

delete()返回的那个delete count没有什么用,server端只是简单地把要删除的id统计一下返回给客户端。实际真正删除了多少,在返回的时候是不知道的,因为是异步执行。

java的sdk,版本2.2.13

image image image

这块调用的时候,有点问题 1.当向量库里面有数据的时候,数据是删掉了,但是报错:No found insertIds, please check your requests 2.当向量库里面没有数据的时候,返回的delCount也是1,也是报错:No found insertIds, please check your requests

这个问题,不知道是不是因为bug引起的,如果有什么好的解决办法,请提供一下,多谢🙏🙏🙏

目前都是deleteByID,为啥还要getID呢?Milvus本身也不知道删除了哪些ID的,你GetInsertID自然就会报错。