向量数据库Milvus

目录

前置知识

MySQL 表 → Milvus 集合(Collection)

操作方式:Python 代码(开发用) + SQL 语句(手工/工具用)

SQL 执行工具:Attu(Milvus 官方可视化工具,类似 Navicat)

MySQL 的概念 Milvus 对应概念 解释
数据库服务(localhost:3306) Milvus 服务(localhost:19530) 都是数据库连接地址
表(table) 集合(Collection) 存数据的容器,就是一张表
列 / 字段(id/title/content) 字段(Field) 表里的列,完全一样
行数据 实体(Entity) 一行数据
普通数字 / 文本字段 标量字段 存标题、内容、分类
无(MySQL 不支持) 向量字段 唯一新东西:存 AI 生成的数字数组
WHERE 条件过滤 过滤表达式 筛选数据,用法一样
ORDER BY 排序 相似度排序 按向量相似程度排序
LIMIT 分页 LIMIT 取前 N 条 拿最相似的几条数据

1. 环境准备

bash 复制代码
# 启动Milvus
docker run -d --name milvus -p 19530:19530 milvusdb/milvus:latest
# 安装Python依赖
pip install pymilvus

2. Python 连接代码

python 复制代码
from pymilvus import MilvusClient, DataType
client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus"
)

一:表结构操作(建表/改表/删表)

1. 新建表(创建集合)

Python 代码

python 复制代码
# 创建文章表 article
client.create_collection(
    collection_name="article",
    schema=[
        {"name": "id", "dtype": DataType.INT64, "is_primary": True},
        {"name": "title", "dtype": DataType.VARCHAR, "max_length": 255},
        {"name": "content", "dtype": DataType.VARCHAR, "max_length": 1000},
        {"name": "content_vector", "dtype": DataType.FLOAT_VECTOR, "dim": 1536}
    ]
)

SQL 写法(和MySQL几乎一样)

sql 复制代码
-- Milvus SQL 建表
CREATE COLLECTION article (
    id INT PRIMARY KEY,
    title VARCHAR(255),
    content VARCHAR(1000),
    content_vector FLOAT_VECTOR DIM=1536
);

2. 修改表(添加字段)

Python 代码

python 复制代码
# 给表添加一个分类字段 category
client.add_field(
    collection_name="article",
    field={"name": "category", "dtype": DataType.VARCHAR, "max_length": 50}
)

SQL 写法

sql 复制代码
-- MySQL: ALTER TABLE ADD COLUMN
-- Milvus: ALTER COLLECTION ADD FIELD
ALTER COLLECTION article ADD FIELD category VARCHAR(50);

3. 删除表(删除集合)

Python 代码

python 复制代码
# 删除整张表
client.drop_collection(collection_name="article")

SQL 写法

sql 复制代码
-- 和 MySQL DROP TABLE 完全一致
DROP COLLECTION article;

二:数据增删改操作

1. 新增数据(插入)

注意:向量(content_vector字段)是 AI 生成的,这里先用模拟向量测试
Python 代码

python 复制代码
data = [
    {
        "id": 1,
        "title": "猫咪介绍",
        "content": "猫会抓老鼠",
        "content_vector": [0.1]*1536,
        "category": "宠物"
    }
]
client.insert(collection_name="article", data=data)

SQL 写法(和MySQL 100%相同

sql 复制代码
INSERT INTO article (id, title, content, content_vector, category)
VALUES (1, '猫咪介绍', '猫会抓老鼠', '[0.1]*1536', '宠物');

2. 修改数据(更新)

Python 代码

python 复制代码
# 根据id修改标题
client.update(
    collection_name="article",
    data={"title": "小猫介绍"},
    ids=[1]
)

SQL 写法(和MySQL 100%相同

sql 复制代码
UPDATE article SET title = '小猫介绍' WHERE id = 1;

3. 删除数据

Python 代码

python 复制代码
# 根据id删除数据
client.delete(collection_name="article", ids=[1])

SQL 写法(和MySQL 100%相同

sql 复制代码
DELETE FROM article WHERE id = 1;

三:数据查询(核心!向量查询)

1. 基础向量查询(找最相似的数据)

Python 代码

场景:

用户问:什么小动物会抓老鼠?

  1. 把这句话转成向量(AI 生成)
  2. 在表里找向量最相似的数据(语义搜索,MySQL 做不到)
  3. 代码
python 复制代码
# 4. 向量搜索:对标 MySQL SELECT * FROM article ORDER BY 相似度 LIMIT 3

# 第一步:用户问题 → 生成查询向量(AI生成,这里用测试向量)
query_vector = [0.11, 0.22, 0.33, ...]

# 第二步:执行搜索(核心代码!)
res = client.search(
    collection_name="article",    # 表名
    data=[query_vector],          # 查询向量
    limit=3,                      # 取前3条(对标 LIMIT 3)
    output_fields=["id", "title", "content"],  # 要查的字段
    anns_field="content_vector"   # 用哪个向量字段搜索
)

# 打印结果
print(res)

结果你会得到:

猫咪介绍 排在第一个!因为语义最匹配!

SQL 写法

sql 复制代码
SELECT id, title, content, distance
FROM article
ORDER BY ANN(content_vector, '[0.11, 0.22, 0.33, ...]')
LIMIT 3;

2. 高级查询:向量 + WHERE 条件(混合搜索)

Python 代码

python 复制代码
# 先过滤分类=宠物,再向量搜索
res = client.search(
    collection_name="article",
    data=[query_vec],
    anns_field="content_vector",
    output_fields=["id", "title", "content"],
    filter="category == '宠物'",
    limit=3
)

SQL 写法(和MySQL WHERE 完全一致)

sql 复制代码
SELECT id, title, content, distance
FROM article
WHERE category = '宠物'  -- 你的MySQL技能直接用
ORDER BY ANN(content_vector, '[0.1]*1536')
LIMIT 3;

四:索引优化(加速查询)

Python 代码

python 复制代码
client.create_index(
    collection_name="article",
    field_name="content_vector"
)

SQL 写法

sql 复制代码
CREATE INDEX idx_content_vector ON article(content_vector);

终极总结

  1. Milvus 有完整 SQL!也可以使用 Python操作
  2. Milvus SQL 语法和 MySQL 95% 通用 ,仅建表用 CREATE COLLECTION
  3. 唯一新功能:ORDER BY ANN(向量字段, 查询向量) 做语义搜索
相关推荐
keineahnung23451 小时前
PyTorch SymNode 為何找不到方法實作?──sizes_strides_methods 動態安裝機制解析
人工智能·pytorch·python·深度学习
苏生十一_Nojambot1 小时前
AI浏览器——Tabbit使用教程
人工智能
AI科技星1 小时前
【无标题】
人工智能·决策树·机器学习·数据挖掘·机器人
2501_901006471 小时前
golang如何使用DTM分布式事务框架_golang DTM分布式事务框架使用方法
jvm·数据库·python
一点一木1 小时前
2026 终端 AI 编码 Agent 六大工具深度横评
前端·人工智能·claude
qq_411262421 小时前
四博 AI 双目智能音箱方案:四路触控、震动反馈、姿态感应、语音克隆和专属知识库全拉满
人工智能·智能音箱
2501_901200531 小时前
Golang如何做Clean Architecture_Golang整洁架构教程【详解】
jvm·数据库·python
咖啡里的茶i1 小时前
实验三 数据完整性实验
数据库·oracle
韶博雅1 小时前
oracle + parfile(数据泵)
数据库·oracle