Milvus 向量数据库快速入门

向量数据库NoSQL数据库机器学习

一、什么是 Milvus?

Milvus 是一款开源的向量数据库,用于存储、管理和检索高维向量数据。它适合构建各种 AI 场景下的向量检索系统,如推荐、图像搜索、问答系统等。

概念关系图(逻辑结构)

  
Milvus数据库  
├── Collection集合  
│   ├── Partition分区  
│   │   └── Entity实体  
│   │       └── Fields字段(向量 + 元数据)  
│   ├── Schema结构  
│   └── Index索引  
├── 查询操作(Search / Query)  
└── 数据一致性机制  
  

二、Milvus 核心概念速查表

picture.image

实体 Entity 示例

  
{  
  "id": 1,  
  "embedding": [0.1, 0.2, 0.3, ...],  
  "title": "iPhone",  
  "price": 999.0  
}  
  

三、核心操作流程

picture.image

四、一致性模型与数据安全保障

Milvus 提供以下一致性保证:

picture.image

五、索引类型选择指南

picture.image

六、进阶知识点补充

picture.image

七、实战:使用 Python SDK 完整示例(基于 Milvus 2.x)

环境准备

  
pip install pymilvus  

初始化连接

  
from pymilvus import connections  
connections.connect(alias="default", host="localhost", port="19530")  

创建 Collection

  
from pymilvus import FieldSchema, CollectionSchema, DataType, Collection  
fields = [  
    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=128)  
]  
schema = CollectionSchema(fields, description="商品向量集合")  
collection = Collection(name="product\_vectors", schema=schema)  

插入数据

  
import numpy as np  
titles = ["iPhone", "MacBook", "AirPods"]  
vectors = [np.random.rand(128).tolist() for \_ in range(3)]  
collection.insert([titles, vectors])  
collection.flush()  

创建索引 & 加载数据

  
index\_params = {  
    "index\_type": "IVF\_FLAT",  
    "metric\_type": "L2",  
    "params": {"nlist": 128}  
}  
collection.create\_index(field\_name="embedding", index\_params=index\_params)  
collection.load()  

向量搜索 + 条件过滤(Hybrid Search)

  
query\_vector = [np.random.rand(128).tolist()]  
search\_params = {"metric\_type": "L2", "params": {"nprobe": 10}}  
results = collection.search(  
    data=query\_vector,  
    anns\_field="embedding",  
    param=search\_params,  
    limit=5,  
    expr="title like 'Mac%'"  
)  
for hits in results:  
    for hit in hits:  
        print(f"id: {hit.id}, distance: {hit.distance}")  

八、常见踩坑提醒

picture.image

九、真实应用场景参考:电商推荐系统

picture.image

十、快速上手建议

✅ 推荐

  • 从创建 Collection 开始,理解字段与向量的对应关系
  • 一步步插入数据、构建索引、执行搜索
  • 多关注向量维度、索引类型和内存管理

❌ 避免

  • 向量维度不统一

  • 未加载数据就开始搜索

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论