跳到主要内容
版本:v2.5.x

加载和释放

加载 Collection 是在 Collection 中进行相似性搜索和查询的前提。本页主要介绍加载和释放 Collection 的步骤。

加载 Collection

加载 Collection 时,Milvus 会将索引文件和所有字段的原始数据加载到内存中,以便快速响应搜索和查询。在载入 Collection 后插入的实体会自动编入索引并载入。

以下代码片段演示了如何加载 Collection。

from pymilvus import MilvusClient

client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)

# 7. Load the collection
client.load_collection(
collection_name="my_collection"
)

res = client.get_load_state(
collection_name="my_collection"
)

print(res)

# Output
#
# {
# "state": "<LoadState: Loaded>"
# }

加载特定字段

Milvus 可以只加载搜索和查询所涉及的字段,从而减少内存使用并提高搜索性能。

说明

部分 Collection 加载目前还处于测试阶段,不建议在生产中使用。

以下代码片段假定您创建了名为my_collection 的 Collection,且 Collection 中有名为my_idmy_vector 的两个字段。

client.load_collection(
collection_name="my_collection",
load_fields=["my_id", "my_vector"] # Load only the specified fields
skip_load_dynamic_field=True # Skip loading the dynamic field
)

res = client.get_load_state(
collection_name="my_collection"
)

print(res)

# Output
#
# {
# "state": "<LoadState: Loaded>"
# }

如果您选择加载特定字段,值得注意的是,只有load_fields 中包含的字段才能用作搜索和查询中的过滤器和输出字段。您应始终在load_fields 中包含主字段和至少一个向量字段的名称。

您还可以使用skip_load_dynamic_field 来确定是否加载动态字段。动态字段是一个保留的 JSON 字段,名为**$meta**,以键值对的形式保存所有非 Schema 定义的字段及其值。加载动态字段时,字段中的所有键都会被加载,并可用于过滤和输出。如果动态字段中的所有键都不参与元数据过滤和输出,请将skip_load_dynamic_field 设置为True

要在 Collection 加载后加载更多字段,需要先释放 Collection,以避免因索引更改而提示可能的错误。

释放 Collection

搜索和查询是内存稠密操作。为节约成本,建议释放当前不使用的 Collection。

下面的代码片段演示了如何释放一个 Collection。

# 8. Release the collection
client.release_collection(
collection_name="my_collection"
)

res = client.get_load_state(
collection_name="my_collection"
)

print(res)

# Output
#
# {
# "state": "<LoadState: NotLoad>"
# }