在 Milvus 中删除并重新创建集合后出现意外结果

问题描述 投票:0回答:1

我正在使用 Milvus Docker 镜像 (milvusdb/milvus:v2.4.5) 以及 pymilvus 版本 2.4.5。删除名为“demo”的集合然后重新创建它后,我在搜索结果中遇到了意外的行为。当我将数据插入集合然后执行搜索时,输出是一个空数组。

但是,如果我创建集合而不先删除它,则搜索会产生正确的结果。我想了解在 Milvus 中删除和重新创建集合的正确过程,以及这种行为是有意为之还是潜在的错误。

collections artificial-intelligence vector-database milvus
1个回答
0
投票

您观察到的行为与 Milvus 在插入操作后管理数据可见性的方式有关。当您删除并重新创建集合时,由于后台管理数据的方式,您插入的数据可能无法立即可见以供查询。在 Milvus 中,当调用

insert()
方法时,数据会被发送到消息队列,数据的实际可见性由一致性级别控制。

默认情况下,一致性级别设置为“有界”,这意味着数据在搜索查询中可见之前可能会有延迟。这种延迟可能会导致您看到的行为,即插入调用后数据尚不可用。

为了确保您插入的数据对于搜索操作立即可见,您应该在执行搜索时将一致性级别设置为“强”。以下是修改搜索代码的方法:

results = client.search(
    collection_name="demo",
    data=[[1,2,3]],
    anns_field="vector",
    consistency_level="Strong",
    output_fields=["data"]
)

这应该可以解决问题并返回预期的搜索结果。如果您仍然遇到问题,请确保您的 Milvus 服务器正常运行,并且 Docker 设置不存在潜在问题。

这是一个无法正常工作的代码片段,说明了问题:

from pymilvus import MilvusClient

client = MilvusClient(uri="http://localhost:19530")
client.drop_collection(collection_name="demo")
client.create_collection(collection_name="demo", dimension=3, auto_id=True)
client.insert("demo", [{"vector": [1, 2, 3], "data": "hello world"}])

# This may return an empty result due to the default consistency level
results = client.search("demo", [[1, 2, 3]], output_fields=["data"])
print(results)  # Expected: [{'data': 'hello world'}], but may return: []
© www.soinside.com 2019 - 2024. All rights reserved.