Milvus SCHEMA 字段类型和选择
目录
以下回答基于 Milvus 的官方架构逻辑,提供清晰、工程化的判断标准。
1. 什么是标量字段(Scalar Field)
标量字段(Scalar Field)是 Milvus 中用于存储可直接比较、过滤、排序的普通值的字段,类型包括:
- Int / Long
- Bool
- Float / Double
- VarChar(字符串)
- JSON
- Timestamp / Date
本质:
标量字段 = 用来做结构化过滤的字段,不参与向量相似度计算。
例如:
- user_id:int
- price:float
- category:string
- created_at:timestamp
- metadata:json
这些字段可以用在 term search、range search、hybrid query 等过滤条件中。
2. 什么是向量字段(Vector Field)
向量字段(Vector Field)用于存储嵌入向量,Milvus 能对它们执行:
- 相似度搜索(ANN Search)
- 向量索引(IVF, HNSW, DiskANN)
- TopK 查询
可分为两类:
| 类型 | 说明 |
|---|---|
| Float Vector | 浮点型向量,用于一般 embedding(文本、图像、音频) |
| Binary Vector | 二进制向量,用于传统 feature 或高性能任务 |
一个 Collection 最多可包含 4 个向量字段。
3. 什么字段应该放标量字段?
以下类型 必须放在标量字段:
3.1 用来过滤/筛选的字段
如果你会在查询中需要:
- WHERE category = 'AI'
- WHERE price BETWEEN 200 AND 300
- WHERE status IN (1,2)
- WHERE created_at > 2024-01-01
这些字段放标量。
典型场景:
| 字段 | 类型 | 理由 |
|---|---|---|
| product_id | 主键 | 唯一标识数据 |
| category | VarChar | 常用于过滤 |
| timestamp | Timestamp | 常用于按时间过滤/排序 |
| brand | VarChar | 过滤品牌 |
| price | Float | 区间过滤 |
4. 什么字段应该放向量字段?
以下类型 必须使用向量字段:
4.1 用来相似度搜索(ANN)的字段
- 文本 embedding(例如 OpenAI embedding、bge)
- 图像 embedding(CLIP、ViT)
- 视频 embedding
- 用户画像 embedding
- 商品多模态 embedding
- 搜索 query embedding
典型场景:
| 业务 | 向量字段示例 |
|---|---|
| 文本搜索 | text_embedding(dim=768) |
| 多模态搜索 | image_embedding、text_embedding |
| 用户推荐 | user_profile_vector |
| 商品搜索 | product_vector |
5. 判断标准:一个字段应该是标量还是向量?
使用以下决策树即可快速判断:
Step 1:这个字段是否参与相似度搜索?
- 是 → 向量字段
- 否 → Step 2
Step 2:这个字段是否用于查询过滤?
(=、IN、NOT IN、BETWEEN、范围、前缀…)
- 是 → 标量字段
- 否 → Step 3
Step 3:这个字段是否可以当作 metadata?
- 是 → 标量字段(JSON 或 VarChar)
- 否 → 如果是高维特征 → 向量字段
简化一句话:
用于“查相似”的放向量,用于“查条件”的放标量。
6. 典型 Collection Schema 示例(最佳实践)
示例:商品搜索系统
product_id (Primary Key, Int64)
category (VarChar)
brand (VarChar)
price (Float)
created_at (Timestamp)
product_text_vector (FloatVector dim=768)
product_image_vector (FloatVector dim=1024)
示例:用户推荐画像
user_id (Primary Key)
age (Int)
gender (VarChar)
location (VarChar)
user_profile_vector (FloatVector dim=256)
7. 常见错误
| 错误 | 原因 |
|---|---|
| 把多维向量塞到 JSON 标量字段 | 无法索引和相似度检索 |
| 标量字段过多 | 每个字段都会占存储、影响加载速度 |
| 用向量字段保存本应过滤的字段 | ANN 搜索成本变极高 |
| 产品 ID 用字符串但不加索引 | 性能差,应该使用主键 |
8. 你也可以告诉我你的业务场景,我可以直接帮你设计 Collection Schema.
需要的话,我可以给你:
- 为你的项目定制 Schema
- 推荐索引类型(IVF/Flat/HNSW/DiskANN)
- 给出写入、查询、合并等性能建议

浙公网安备 33010602011771号