一、先安装 Python 客户端¶
pip install pymilvus==2.6.0b0
这里最好让 pymilvus 版本和 Milvus 服务版本尽量对应。
二、连接到 Milvus¶
最基础的连接方式如下:
from pymilvus import connections
connections.connect("default", host="localhost", port="19530")
三、创建集合¶
示例里使用的是 8 维向量,便于演示。
核心步骤包括:
- 定义字段;
- 定义集合 Schema;
- 创建 Collection。
字段示例:
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True)
FieldSchema(name="title", dtype=DataType.VARCHAR, max_length=200)
FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=8)
四、准备和插入测试数据¶
示例里准备了 5 条产品数据,例如:
- iPhone 15
- MacBook Pro
- AirPods Pro
- iPad Air
- Apple Watch
插入方式通常是按字段列表组织:
insert_data = [
titles,
test_vectors
]
product_collection.insert(insert_data)
product_collection.flush()
flush() 的作用是让数据落盘并可搜索。
五、创建索引¶
索引是 Milvus 检索性能的关键。
示例里用了:
index_type = IVF_FLATmetric_type = L2
index_params = {
"index_type": "IVF_FLAT",
"metric_type": "L2",
"params": {"nlist": 8}
}
创建索引后,还需要把集合加载到内存:
product_collection.load()
六、向量搜索¶
搜索时你需要提供:
- 查询向量;
- 搜索参数;
- 返回条数;
- 需要输出的字段。
示例:
search_vector = [[0.13, 0.24, 0.46, 0.68, 0.88, 0.02, 0.35, 0.57]]
search_params = {"metric_type": "L2", "params": {"nprobe": 3}}
这一步的结果会返回最接近的若干条记录。
七、更新和删除数据¶
Milvus 也支持 upsert 和删除操作。
7.1 更新¶
product_collection.upsert(
data=[
[existing_id],
["iPhone 15 Pro Max"],
[[0.14, 0.25, 0.47, 0.69, 0.87, 0.03, 0.36, 0.58]]
]
)
7.2 删除¶
product_collection.delete(f"id in {delete_ids}")
八、做标量过滤查询¶
除了向量检索,还可以结合普通字段做过滤:
result = product_collection.query(
expr="title like 'iPhone%'",
output_fields=["id", "title", "embedding"]
)
这让 Milvus 不只是“查相似向量”,还可以搭配标量字段一起使用。
九、列出集合和查看数据¶
你还可以通过 utility.list_collections() 列出所有集合,或者用 collection.query() 查看指定集合里的数据。
这对调试特别有帮助,尤其是在刚开始建表和导入样本的时候。
十、为什么这个实验很有价值¶
一旦你把这条链路跑通了,RAG 里的很多抽象概念就会具体起来:
- 向量长什么样;
- 集合怎么存;
- 检索怎么做;
- 更新和过滤怎么配合。
这比只看原理图更能帮助你真正理解向量数据库在 RAG 里的角色。