参考 #
1.向量 #
向量(Vector)是一个同时具有大小和方向的量。与普通的数(标量)不同,向量不仅仅表示"有多少",还表示"往哪里"。
2.向量嵌入(Embeddings) #
向量嵌入(Embeddings)是一种把"文字、图片、声音"等信息,转换成一组数字(向量)的技术。这些数字可以用来表示信息的"含义"或"特征"。
3.向量数据库 #
向量数据库是一种专门用来存储、管理和检索向量数据(如文本、图片、音频等经过嵌入后的向量)的数据库。它能高效地找到"最相似"的内容,是AI时代的关键基础设施。
4. milvus #
5. 安装milvus #
- milvus安装
- 下载
https://github.com/milvus-io/milvus/releases/download/v2.4.15/milvus-standalone-docker-compose.ym并保存为docker-compose.yml
5.1 启动命令 #
# 启动Milvus服务(后台运行模式)
docker compose up -d
# 查看Milvus服务运行状态
docker compose ps5.2 docker-compose.yml #
# Docker Compose 版本声明
version: '3.5'
# 定义服务
services:
# etcd 服务 - 用于元数据存储和配置管理
etcd:
# 容器名称
container_name: milvus-etcd
# 使用的镜像
image: quay.io/coreos/etcd:v3.5.5
# 环境变量配置
environment:
# 自动压缩模式设置为修订版本
- ETCD_AUTO_COMPACTION_MODE=revision
# 自动压缩保留1000个修订版本
- ETCD_AUTO_COMPACTION_RETENTION=1000
# 后端存储配额设置为4GB
- ETCD_QUOTA_BACKEND_BYTES=4294967296
# 快照计数设置为50000
- ETCD_SNAPSHOT_COUNT=50000
# 数据卷挂载
volumes:
# 将本地etcd数据目录挂载到容器内
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd
# 启动命令
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
# 健康检查配置
healthcheck:
# 健康检查命令
test: ["CMD", "etcdctl", "endpoint", "health"]
# 检查间隔30秒
interval: 30s
# 超时时间20秒
timeout: 20s
# 重试次数3次
retries: 3
# MinIO 服务 - 用于对象存储
minio:
# 容器名称
container_name: milvus-minio
# 使用的镜像
image: minio/minio:RELEASE.2023-03-20T20-16-18Z
# 环境变量配置
environment:
# MinIO访问密钥
MINIO_ACCESS_KEY: minioadmin
# MinIO密钥
MINIO_SECRET_KEY: minioadmin
# 端口映射
ports:
# 控制台端口9001
- "9001:9001"
# API端口9000
- "9000:9000"
# 数据卷挂载
volumes:
# 将本地minio数据目录挂载到容器内
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data
# 启动命令
command: minio server /minio_data --console-address ":9001"
# 健康检查配置
healthcheck:
# 健康检查命令
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
# 检查间隔30秒
interval: 30s
# 超时时间20秒
timeout: 20s
# 重试次数3次
retries: 3
# Milvus 独立模式服务
standalone:
# 容器名称
container_name: milvus-standalone
# 使用的镜像
image: milvusdb/milvus:v2.4.15
# 启动命令
command: ["milvus", "run", "standalone"]
# 安全选项
security_opt:
# 禁用seccomp安全策略
- seccomp:unconfined
# 环境变量配置
environment:
# etcd服务端点
ETCD_ENDPOINTS: etcd:2379
# MinIO服务地址
MINIO_ADDRESS: minio:9000
# 数据卷挂载
volumes:
# 将本地milvus数据目录挂载到容器内
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus
# 健康检查配置
healthcheck:
# 健康检查命令
test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
# 检查间隔30秒
interval: 30s
# 启动等待时间90秒
start_period: 90s
# 超时时间20秒
timeout: 20s
# 重试次数3次
retries: 3
# 端口映射
ports:
# Milvus服务端口19530
- "19530:19530"
# 健康检查端口9091
- "9091:9091"
# 依赖服务
depends_on:
# 依赖etcd服务
- "etcd"
# 依赖minio服务
- "minio"
# 网络配置
networks:
# 默认网络
default:
# 网络名称
name: milvus5.3 配置docker镜像 #
// Docker配置文件 - 用于配置Docker守护进程的行为
{
// 构建器配置
"builder": {
// 垃圾回收配置
"gc": {
// 默认保留存储空间为20GB
"defaultKeepStorage": "20GB",
// 启用垃圾回收功能
"enabled": true
}
},
// 禁用实验性功能
"experimental": false,
// Docker镜像仓库镜像源配置
"registry-mirrors": [
// 阿里云镜像源
"https://fwvjnv59.mirror.aliyuncs.com",
// 道客云镜像源
"https://docker.m.daocloud.io",
// Huecker镜像源
"https://huecker.io",
// Timeweb镜像源
"https://dockerhub.timeweb.cloud",
// Noohub镜像源
"https://noohub.ru"
]
}6.Attu #
Attu 是 Milvus 官方推出的图形界面工具,让用户可以通过网页界面轻松管理和操作 Milvus 向量数据库,无需编写代码。
6.1 启动Attu #
docker run -d -p 8000:3000 -e MILVUS_URL=192.168.2.111:19530 zilliz/attu:v2.5docker run这是 Docker 的命令,用于启动一个新的容器。-p 8000:3000-p表示端口映射(Port Mapping)。8000:3000表示将主机的 8000 端口映射到容器内部的 3000 端口。- 这样,访问
http://<主机IP>:8000时,请求会被转发到容器内的 3000 端口。
-e MILVUS_URL=192.168.2.111:19530-e表示设置环境变量(Environment Variable)。MILVUS_URL=192.168.2.111:19530告诉 Attu(Milvus 的管理界面)连接的 Milvus 服务地址是192.168.2.111:19530。- 默认情况下,Milvus 的端口是
19530,所以这里指向的是 Milvus 服务。
zilliz/attu:v2.5- 这是 Docker 镜像名称,由 Zilliz 提供,用于运行 Attu(Milvus 的 Web 管理界面)。
v2.5是版本标签,表示使用的是 2.5 版本的 Attu。
- 访问地址
http://192.168.2.111:8000- 由于容器映射了主机的
8000端口,所以访问http://192.168.2.111:8000可以进入 Attu 的 Web 界面。 - 如果是在本机运行,也可以直接用
http://localhost:8000访问。
- 由于容器映射了主机的
- 访问地址
- 启动一个 Attu(Milvus 管理界面) 容器。
- 将主机的
8000端口映射到容器的3000端口(Attu 默认运行在 3000 端口)。- 配置 Attu 连接到 Milvus 服务地址
192.168.2.111:19530。- 访问
http://192.168.2.111:8000即可使用 Attu 管理 Milvus
6.2 创建集合 #

6.2.1 字段类型 #
| 类型类别 | 类型名称 | 说明/用途 |
|---|---|---|
| 主键字段 | INT64 | 64位整数,常用于自增ID、编号等唯一标识。 |
| VARCHAR | 可变长度字符串,适合用作唯一标识的文本(如用户名、邮箱等)。 | |
| 向量字段 | Binary Vector | 二进制向量,常用于图像、音频等二进制特征的检索。 |
| Float Vector | 浮点型向量,最常见的AI特征向量类型(如文本、图片的嵌入向量)。 | |
| Float16 Vector | 16位浮点向量,节省存储空间,适合大规模数据。 | |
| BFloat16 Vector | 另一种16位浮点格式,兼容AI硬件加速。 | |
| Sparse Vector | 稀疏向量,适合大部分元素为0的高维特征(如文本one-hot编码)。 | |
| BM25(Varchar) | 文本字段,支持BM25等关键词检索算法。 | |
| 标量字段 | Int8 | 8位整数,节省空间,适合小范围数字。 |
| Int16 | 16位整数。 | |
| Int32 | 32位整数。 | |
| Int64 | 64位整数。 | |
| Float | 单精度浮点数。 | |
| Double | 双精度浮点数,精度更高。 | |
| Boolean | 布尔值,只有true/false。 | |
| VarChar | 可变长度字符串,适合存储文本(如名字、描述等)。 | |
| JSON | 存储结构化的JSON数据,适合灵活扩展字段。 | |
| Array | 数组类型,可以存储一组同类型的值。 |
- 主键字段:每个集合必须有一个主键,保证每条数据唯一。可以用数字(INT64)或字符串(VARCHAR)。
- 向量字段:用于存储AI模型生成的特征向量,是Milvus支持“相似度检索”的核心。
- 例如:图片特征用Float Vector,文本检索用BM25(Varchar)。
- 标量字段:存储普通属性,如年龄(Int32)、价格(Float)、标签(VarChar)、扩展信息(JSON)等。
6.2.2 标量选项 #
6.2.3 其它选项 #
6.3.schema #

6.4.数据 #

6.5.向量搜索 #

6.6.分区 #

6.7.数据段 #
