python 无法删除Milvus集合中的记录

41ik7eoe  于 2023-11-15  发布在  Python
关注(0)|答案(1)|浏览(310)

下面的代码我已经执行从Milvus集合中删除记录。没有错误,但相应的记录也没有删除。
请推荐解决方案

from pymilvus import connections,Collection,db,utility,FieldSchema, CollectionSchema

def connectVectorDB(**conStrings):
    try:
        milvusDB = connections.connect(
            #db_name=conStrings['dbName'],
            host=conStrings['hostname'],
            port=conStrings['port']
            )
        db.using_database(conStrings['dbName'])
        return milvusDB
    except Exception as err:
        raise err

dbConnections = connectVectorDB(dbName='default',hostname="localhost",port='19530')
myCol = Collection('DocStrings')

expression = "docID == 445341931317291845"
myCol.delete(expr=expression)
myCol.flush()

字符串

bttbmeg0

bttbmeg01#

先问几个问题:

  • 你用的是什么Milvus和Pyvus Milvus verion?
  • docId是否定义为集合中的主键?

同样在上面的例子中,你使用了==,这在2.3.2之前是不允许的。
Before version 2.3.2
Milvus只支持删除具有明确指定的主键的实体,这可以仅通过术语表达式in来实现。
也就是说,可以使用像expr = "book_id in [0,1]"这样的布尔表达式,其中book_id被定义为主键。
从2.3.2开始,不仅可以通过主键删除实体,还可以使用复杂的布尔表达式:
Milvus支持通过主键或复杂布尔表达式删除实体。通过主键删除实体比通过复杂布尔表达式删除实体快得多,也更轻。这是因为Milvus在通过复杂布尔表达式删除数据时首先执行查询。
值得一提的是:

  • 如果一致性级别设置为低于Strong,则删除后仍可以立即检索已删除的实体。
  • 删除的实体超过时间旅行的预先指定的时间跨度不能再次检索。
  • 频繁的删除操作会影响系统性能。在使用comlpex布尔表达式删除实体之前,请确保集合已加载。
  • 通过复杂的布尔表达式删除实体不是原子操作。因此,如果中途失败,仍然可能会删除某些数据。
  • 仅当一致性设置为Bounded时,才支持通过复杂布尔表达式删除实体。

参见:https://milvus.io/docs/delete_data.md

相关问题