在Milvus中管理Schema

在Milvus中,Schema定义了向量数据库中数据的组织结构,包括字段名称和类型等。通过定义Schema来管理和查询数据,以支持高效的搜索和分析操作。本文为您介绍Collection和字段的Schema定义以及如何在Milvus中创建Schema。

前提条件

  • 已在本地客户端成功安装了PyMilvus库,并将其更新至当前最新版本。

    如果您尚未在本地客户端安装PyMilvus库,或者需要将其更新至当前最新版本,您可以执行以下命令。

    pip install --upgrade pymilvus
  • 已创建Milvus实例,请参见详情快速创建Milvus实例

Schema介绍

在创建集合之前,通常需要预先定义字段的Schema,以便在构建集合时能够整合并应用这些字段的Schema以及集合的Schema设置。

字段Schema

在Milvus中定义字段Schema时,系统当前只允许指定一种类型的字段作为主键(Primary Key)。

属性

描述

name

字段的名称。

dtype

字段的数据类型。

description

字段的描述信息。

is_primary

是否将该字段设为主键。取值为True或False。

auto_id(主键字段)

是否为主键字段启用自动递增ID。取值为True或False。

max_length(Varchar属性)

设置Varchar类型字段的最大长度。取值范围为[1, 65535]。

dim

向量字段的维度,是一个整数(Integer)类型的值,取值范围为[1, 32768]。

is_partition_key

是否将该字段作为分区键使用。取值为True或False。

Collection Schema

Collection Schema是Milvus中对集合结构和特性的详细定义。

属性

描述

field

集合中定义的字段。

description

集合的描述信息。可选参数。

partition_key_field

分区字段的名称。可选参数。

enable_dynamic_field

是否开启动态Schema属性。默认值为False。

创建Collection Schema

以下代码示例为您展示了如何使用 FieldSchema 来定义各个字段的属性,然后基于这些属性构建 CollectionSchema,并最终创建 Collection 对象的过程。集合创建好后,便可执行数据插入、查询等后续操作。

from pymilvus import FieldSchema, CollectionSchema, connections, DataType, Collection

conn = connections.connect(host="c-xxx.milvus.aliyuncs.com", port=19530, user="<yourUsername>", password="<yourPassword>")

# 定义集合字段(FieldSchema)。

# 主键字段:id,类型为INT64,用于唯一标识每条记录。
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="primary id")

# 年龄字段:age,类型为INT64,用于存储年龄信息。
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="age")

# 向量字段:embedding,类型为FLOAT_VECTOR,维度为128,用于存储向量数据。
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")

# 分区键字段:position,类型为VARCHAR,最大长度为256,用于进行数据分区。
position_field = FieldSchema(name="position", dtype=DataType.VARCHAR, max_length=256, is_partition_key=True)

# 使用定义好的字段构建CollectionSchema。
schema = CollectionSchema(fields=[id_field, age_field, embedding_field], auto_id=False, enable_dynamic_field=True, description="desc of a collection")

# 定义要创建的集合名称。
collection_name = "demo_1"
# 使用定义好的Schema创建Collection对象。
collection = Collection(
    name=collection_name,
    schema=schema,
    using='default',  # 指定使用的连接名,默认为 'default'。
    shards_num=2  # 设置集合的分片数量,可根据实际需求调整。
)
### Milvus 中向量存储、索引与查询的使用教程 #### 1. 向量存储 Milvus 是一个专为大规模向量数据设计的数据库,能够高效处理高维向量的存储和检索任务。通过其内置的数据管理机制,用户可以轻松完成向量数据的持久化存储。为了提升性能,建议将 Milvus 的数据路径挂载至高速存储设备上,例如 NVMe SSD[^3]。 对于独立部署模式下的 Milvus 实例,容器内的默认数据目录位于 `/var/lib/Milvus/data`;而在集群模式下,则需分别关注查询节点和索引节点所对应的相同路径设置。 --- #### 2. 向量索引方法 Milvus 提供了丰富的向量索引算法以满足不同应用场景的需求。这些索引方法主要包括但不限于 IVF_FLAT、IVF_PQ 和 HNSW 等[^1]。每种索引方式都有特定适用场景: - **IVF_FLAT**: 非常适合中小规模数据集,在保持较高精度的同时提供较快的速度。 - **HNSW (Hierarchical Navigable Small World)**: 更适用于超大规模数据集,尤其当需要平衡速度与召回率时表现优异。 更多关于如何选择合适的索引策略及其对应参数调优的内容可参考官方文档说明[^5]。 --- #### 3. 执行向量查询 在构建好相应的向量索引之后,可以通过定义搜索条件来发起实际的相似性查找请求。具体流程如下所示: ```python from pymilvus import Collection, FieldSchema, DataType, CollectionSchema # 定义集合结构并加载已有数据 fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128) ] schema = CollectionSchema(fields=fields) collection_name = "example_collection" collection = Collection(name=collection_name, schema=schema) # 加载已创建好的 collection 数据到内存中 partition_names = ["_default"] # 如果有分区则指定名称列表 collection.load(partition_names) # 构造待查目标向量及选项配置 search_params = {"metric_type": "L2", "params": {"nprobe": 10}} target_vector = [[random.random() for _ in range(128)]] # 发起搜索操作 results = collection.search( data=target_vector, anns_field="embedding", param=search_params, limit=5 ) for result in results: print(f"Top-{len(result)} search results:") for res in result: print(f"- ID={res.id}, Distance={res.distance}") ``` 上述代码片段展示了基于 Python SDK `pymilvus` 如何连接至 Milvus 并执行一次简单的最近邻搜索过程[^2]。其中需要注意的是,针对某些高级特性比如跨硬件平台间的兼容性调整(GPU/CPU 转换),可通过合理设定诸如 `nprobe` 参数值实现无缝迁移[^4]。 --- #### 4. 性能优化技巧 除了正确选用恰当类型的索引来加速查询外,还可以通过对以下几个方面进行细致调节进一步改善整体效率: - **资源分配**: 根据业务负载动态增减服务端可用计算单元数量; - **批量导入**: 利用批量化写入代替单条记录逐一提交减少网络开销; - **预热缓存**: 在高峰期来临前预先加載热点数据进入工作区提高响应及时性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值