向量数据库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(向量字段, 查询向量) 做语义搜索
相关推荐
MomentYY2 小时前
AI 到底是“懂”,还是在“猜”?
前端·人工智能·ai编程
拾光拾趣录3 小时前
为什么采用多路检索而不是单一向量检索?
人工智能
拾光拾趣录3 小时前
Agent 编排器是怎么设计的?为什么这样设计?
人工智能
拾光拾趣录3 小时前
为什么选择 ReAct 模式而不是 Plan-and-Execute?
人工智能
武子康4 小时前
调查研究-196 CEO-Bench:Agent 不再只是“做任务“,而是要学会“经营一个系统“
人工智能
用户329901675054 小时前
把AI返回的Markdown表格渲染成可排序表格
人工智能
还好还好不是吗4 小时前
MatrixMedia HTTP 发布接口:让 AI 工作流直接驱动多平台视频发布
人工智能
贵慜_Derek4 小时前
复杂系统没法一把梭重构:Semi-Autoresearch 怎么小步迁移还不掉功能
人工智能·agent·ai编程
ctxinf4 小时前
Vercel Eve 实际上手初探
人工智能
用户5191495848454 小时前
利用ShellcodePack实现DLL劫持与COM对象劫持技术详解
人工智能·aigc