Milvus 向量数据库快速入门

一、什么是 Milvus?

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

概念关系图(逻辑结构)

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

二、Milvus 核心概念速查表

实体 Entity 示例

json 复制代码
{
  "id": 1,
  "embedding": [0.1, 0.2, 0.3, ...],
  "title": "iPhone",
  "price": 999.0
}

三、核心操作流程

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

Milvus 提供以下一致性保证:

五、索引类型选择指南

六、进阶知识点补充

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

环境准备

python 复制代码
pip install pymilvus

初始化连接

python 复制代码
from pymilvus import connections
connections.connect(alias="default", host="localhost", port="19530")

创建 Collection

python 复制代码
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)

插入数据

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

创建索引 & 加载数据

python 复制代码
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)

python 复制代码
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}")

八、常见踩坑提醒

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

十、快速上手建议

✅ 推荐

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

❌ 避免

  • 向量维度不统一
  • 未加载数据就开始搜索
相关推荐
混乱意志15 分钟前
dgraph example数据导入
数据库·后端
Web极客码27 分钟前
WordPress 站点漏洞利用:数据库恶意注入与多重感染的案例分析
数据库·wordpress·网站安全·数据库注入·wordpress漏洞·wordpress安全插件
刺客xs31 分钟前
MySQL数据库----DML语句
数据库·mysql
嘉讯科技HIS系统41 分钟前
嘉讯科技:医疗信息化、数字化、智能化三者之间的关系和区别
大数据·数据库·人工智能·科技·智慧医疗
爱上语文2 小时前
Redis基础(4):Set类型和SortedSet类型
java·数据库·redis·后端
lifallen2 小时前
Paimon vs. HBase:全链路开销对比
java·大数据·数据结构·数据库·算法·flink·hbase
Brookty3 小时前
【MySQL】JDBC编程
java·数据库·后端·学习·mysql·jdbc
先做个垃圾出来………3 小时前
SQL的底层逻辑解析
数据库·sql
码不停蹄的玄黓4 小时前
深入拆解MySQL InnoDB可重复读(RR)隔离级别:MVCC+临键锁如何「锁」住一致性?
数据库·mysql·可重复读
paopaokaka_luck4 小时前
基于SpringBoot+Vue的酒类仓储管理系统
数据库·vue.js·spring boot·后端·小程序