Schema
本节指南梳理 milvus 创建Schema (mysql表结构)
创建 Schema
from pymilvus import MilvusClient, DataType
# 创建 Schema
schema = MilvusClient.create_schema()
# 添加主字段
schema.add_field(
field_name="my_id",
datatype=DataType.INT64,
# highlight-start
is_primary=True, # 明确说明该字段是主键,主键默认接受 int64
auto_id=False, # 不自动分配主键ID, 需要你自己为每条数据提供值
# highlight-end
)
# 添加向量字段 (向量字段接受各种稀疏和密集向量嵌入)
schema.add_field(
field_name="my_vector",
datatype=DataType.FLOAT_VECTOR,
# highlight-next-line
dim=5 # dim 参数表示向量字段中要保持的向量嵌入的维数
)
#添加字符串字段
schema.add_field(
field_name="my_varchar",
datatype=DataType.VARCHAR,
# highlight-next-line 必须要规定
max_length=512
)
#添加数字字段
schema.add_field(
field_name="my_int64",
datatype=DataType.INT64,
)
# 添加布尔字段
schema.add_field(
field_name="my_bool",
datatype=DataType.BOOL,
)
# 添加 JSON 字段
schema.add_field(
field_name="my_json",
datatype=DataType.JSON,
)
# 添加数组字段
schema.add_field(
field_name="my_array",
datatype=DataType.ARRAY,
element_type=DataType.VARCHAR,
max_capacity=5,
max_length=512,
)Milvus 提供了 Schema 的两种模式:
| 特性 | 静态 Schema 模式(推荐) | 动态字段模式(enable_dynamic_field = True) |
|---|---|---|
| 是否需要提前定义所有字段 | ✅ 是 | ❌ 否 |
| 能否插入未定义的字段(如 name, age) | ❌ 不能 | ✅ 可以 |
| 性能 | ⚡ 更高(索引优化好) | ⚠️ 稍低(需处理未知字段) |
| 查询能力 | ✅ 支持标量过滤、索引加速 | ✅ 支持,但部分字段可能无索引 |
| 类似数据库 | MySQL / PostgreSQL | MongoDB(灵活 schema) |
| 安全性和可维护性 | ✅ 高(结构清晰) | ⚠️ 较低(字段混乱风险) |
Milvus 三种向量类型详解
密集向量(Dense Vector)
密集向量是机器学习和数据分析中的数值表示法,其中大部分或所有元素都不为 0。与稀疏向量相比,密集向量在相同维度内包含更多信息,能够更好地表达数据的语义特征。
主要应用场景:
- 语义搜索
- 推荐系统
- 图像识别
- 自然语言理解
特点:
- 多维表示:每个维度代表一个抽象的概念或特征,整体构成高维语义空间。
- 语义关系:向量之间的距离(如欧氏距离、余弦相似度)反映其语义相似性,距离越近语义越相似。
- 聚类效应:语义相近的数据在向量空间中自然聚集形成簇,便于分类和检索。
字段定义示例:
schema.add_field(
field_name="my_vector",
datatype=DataType.FLOAT_VECTOR,
# highlight-next-line
dim=5 # dim 参数表示向量字段中要保持的向量嵌入的维数
)二进制向量(Binary Vector)
二进制向量将传统的高维浮点向量转换为仅包含 0 和 1 的向量形式。该过程称为“二值化”,可在保留主要语义信息的同时显著降低资源消耗。
主要优势:
- 大幅压缩存储空间
- 加速计算(使用汉明距离进行高效比对)
- 降低内存占用和能耗
特点:
- 广泛应用于对计算效率和存储优化要求高的场景。
- 在实时处理海量数据时,有助于降低延迟和计算成本。
- 特别适用于移动设备、嵌入式系统等资源受限环境。
字段定义示例:
schema.add_field(field_name="binary_vector", datatype=DataType.BINARY_VECTOR, dim=128)稀疏向量(Sparse Vector)
概念: 稀疏向量是信息检索和自然语言处理中用于捕捉表层术语匹配的重要方法。虽然稠密向量在语义理解方面表现出色,但稀疏向量能提供更可预测、更精确的关键词匹配结果,尤其适用于搜索特殊术语、专有名词或文本标识符的场景。
特点:
- 是一种高维向量,其中大部分元素为零,仅有少数维度具有非零值。
- 为了节省存储空间和提升处理效率,稀疏向量通常只存储非零元素及其对应的维度索引。
- 表示方式:采用
{index: value}的键值对形式存储(例如:{2: 0.2, 9997: 0.5, 9999: 0.7}),而不是完整的数组。
对比示例:
- 稠密向量:
[0.3, 0.8, 0.2, 0.3, 0.1](所有维度都有值,完整存储) - 稀疏向量:
{2: 0.2, 9997: 0.5, 9999: 0.7}(仅存储非零项,节省空间)
使用场景:
- 关键词搜索(如搜索引擎中的字面匹配)
- TF-IDF、BM25 等传统文本表示模型
- 高维特征但数据稀疏的机器学习任务
字段定义示例:
schema.add_field(
field_name="sparse_vector",
datatype=DataType.SPARSE_FLOAT_VECTOR
)版权所有
版权归属:念宇
