跳转到内容

Milvus 向量数据库教程大纲

当向量搜索需要"大"和"快"——Milvus,为十亿级向量而生的分布式检索引擎


📖 教程概述

如果你已经学过本系列的 Chroma 和 pgvector 教程,你可能会问:Chroma 够简单、pgvector 够实用,为什么还要学 Milvus?答案就一个字——。Chroma 适合百万级向量的快速原型,pgvector 适合千万级向量的混合查询,但当你的数据量达到亿级甚至十亿级——全网商品搜索、跨模态检索、推荐系统的用户-物品向量——单机方案就力不从心了。Milvus 是目前最成熟的开源分布式向量数据库,它原生支持分片(Sharding)、多副本(Replication)、向量量化(Quantization),以及从 IVFFlat 到 DiskANN 的多种索引类型,让你在海量数据面前依然能保持毫秒级的检索延迟。

但 Milvus 的"大"也带来了"复杂"——分布式架构、多种部署模式、丰富的索引参数、数据一致性模型……这些概念对初学者来说并不友好。本教程的目标就是帮你把 Milvus 的复杂性拆解成可理解、可操作的知识块——从最简单的 Milvus Lite(一个 Python 包就能跑)到生产级的分布式集群,从最基本的向量搜索到高级的多向量检索和重排序,从 CRUD 到分区管理和多租户隔离。我们不只讲 API 怎么调,更要理解 Milvus 的架构设计、索引选型的权衡、以及它在 RAG 架构中与 Chroma/pgvector 的互补关系。

本教程共 7 章:第 1~2 章带你理解 Milvus 的架构和核心概念,第 3~4 章深入数据操作和索引调优,第 5 章探索高级特性,第 6 章实战 RAG 系统,第 7 章覆盖生产部署与运维。如果你已经学过 Chroma 或 pgvector 教程,很多概念(向量、距离度量、ANN 索引)你已经熟悉了,本教程会侧重 Milvus 的独特之处——分布式架构、量化索引、分区管理、多向量搜索。


🗺️ 章节规划

第1章:Milvus 概述与架构

1.1 Milvus 是什么?为什么需要分布式向量数据库

  • 从单机到分布式的必然:当向量数量从百万到十亿,单机的内存和算力都不够用——你需要把数据分片到多台机器上,并行计算距离,合并结果
  • Milvus 的定位:云原生分布式向量数据库,专为大规模、高吞吐、低延迟的向量检索场景设计
  • Milvus vs pgvector vs Chroma
    • Milvus:分布式、亿级向量、多种索引+量化、运维复杂
    • pgvector:单机、千万级、SQL 原生、事务一致性、运维简单
    • Chroma:嵌入式、百万级、零配置、Python 原生、适合原型
  • Milvus 的核心能力:分布式存储与计算、多种索引类型(FLAT/IVFFlat/HNSW/IVF_PQ/SCANN/DiskANN)、向量量化(PQ/SQ/BQ)、标量过滤、动态字段、多向量搜索
  • 谁在用 Milvus:NVIDIA、Roblox、Shopee、京东、搜狐——搜索推荐、图片去重、化学分子检索等场景

1.2 Milvus 架构解析:存算分离的云原生设计

  • 存算分离(Disaggregated Storage):为什么 Milvus 把存储和计算分开——独立扩缩容、故障隔离、资源利用率
  • 三大核心组件
    • 协调器(Coordinator):大脑——RootCoord(元数据)、QueryCoord(查询调度)、DataCoord(数据调度)、IndexCoord(索引调度)
    • 工作节点(Worker Node):手脚——QueryNode(执行搜索)、DataNode(写入数据)、IndexNode(构建索引)
    • 存储层(Storage):记忆——元数据存储(etcd)、消息队列(Pulsar/Kafka)、对象存储(MinIO/S3)
  • 数据流:写入 → 消息队列 → DataNode → 对象存储 → IndexNode 构建索引 → QueryNode 加载索引 → 搜索
  • 为什么需要理解架构:调优和排障时你需要知道瓶颈在哪个组件——是 QueryNode 内存不够?还是对象存储 I/O 太慢?还是 IndexNode 构建索引太慢?

1.3 安装与连接:从 Milvus Lite 到分布式集群

  • 三种部署模式
    • Milvus Litepip install pymilvus,纯 Python 本地运行,适合开发和测试
    • Milvus Standalone:Docker 单容器,包含所有组件,适合中小规模生产
    • Milvus Cluster:Docker Compose / Helm / Operator,多节点分布式,适合大规模生产
  • Milvus Lite 快速体验
    python
    from pymilvus import MilvusClient
    client = MilvusClient("./milvus_demo.db")  # 本地文件,零配置
  • Docker Standalone 一键启动docker compose up -d
  • Zilliz Cloud:Milvus 的全托管云服务,免运维,按量付费
  • 连接参数:uri(地址)、token(认证)、db_name(数据库名)

第2章:Milvus 核心概念与数据模型

2.1 Collection 与 Schema:Milvus 的数据模型设计

  • Collection:Milvus 的"表",逻辑上的一组同类向量数据
  • Schema:Collection 的结构定义——包含哪些字段、每个字段的类型和约束
  • FieldSchema:字段定义——名称、类型、是否主键、是否自增、维度(向量字段)
  • CollectionSchema:Schema 定义——字段列表、描述、是否启用动态字段
  • Schema 设计原则:向量字段必须有、主键字段必须有、标量字段按需添加(影响存储和过滤性能)
  • 与 pgvector 的对比:pgvector 用 SQL CREATE TABLE 定义表结构,Milvus 用 Python API 定义 Schema——本质相同,表达方式不同

2.2 字段类型全景:向量字段、标量字段、动态字段

  • 向量字段DataType.FLOAT_VECTOR(float32)、DataType.BINARY_VECTOR(二值)、DataType.FLOAT16_VECTORDataType.BFLOAT16_VECTORDataType.SPARSE_FLOAT_VECTOR(稀疏向量)
    • 维度参数 dim:向量维度,如 768、1536
    • 一个 Collection 可以有多个向量字段(多模态场景:文本向量 + 图像向量)
  • 标量字段DataType.INT64DataType.INT32DataType.VARCHARDataType.BOOLDataType.JSONDataType.ARRAY
    • 标量字段用于过滤(WHERE 条件),不参与相似度计算
    • VARCHAR 需要指定 max_length,JSON 类型用于灵活的 metadata
  • 主键字段is_primary=True,支持 INT64 自增和 VARCHAR 自定义
  • 动态字段enable_dynamic_field=True,允许插入 Schema 之外的字段,自动存入 $meta JSON 字段
    • 什么时候用动态字段:metadata 字段不确定、不同文档有不同的属性
    • 动态字段的代价:过滤性能不如静态标量字段、不支持索引(2.4.x 版本开始支持 JSON 索引)

2.3 距离度量:L2 / Cosine / IP

  • 三种距离度量的数学定义和直觉解释
    • L2(欧氏距离):空间中两点的直线距离,值越小越相似
    • Cosine(余弦相似度):向量方向的夹角,忽略长度差异,适合文本语义
    • IP(内积):向量点积,值越大越相似,适合已归一化的向量
  • 距离度量在 Collection 级别指定:创建 Collection 时选定,之后不可更改
  • 距离度量的选择指南
    • 文本语义搜索 → Cosine(文本 embedding 通常关注方向而非长度)
    • 图像特征匹配 → L2 或 IP(取决于模型输出是否归一化)
    • 推荐系统 → IP(用户向量和物品向量的内积表示偏好强度)
  • 与 pgvector 的对比:pgvector 在查询时选择操作符(<->/<=>/<#>),Milvus 在建表时指定度量——Milvus 的设计更严格,避免了操作符不匹配导致索引失效的问题

第3章:数据操作——CRUD 与搜索

3.1 数据插入:单条、批量与 Partition

  • insert():插入数据,传入字段字典或字典列表
  • 批量插入的性能优化
    • 单次插入建议 1000~10000 条
    • 超大批量使用分批插入 + 动态调整批次大小
    • 插入后需要 flush() 确保数据持久化(Milvus Lite 自动 flush)
  • Partition:Collection 的物理分区,数据按分区键自动路由
    • 为什么用 Partition:按时间/分类分区,搜索时只扫描相关分区,减少计算量
    • 创建分区:create_partition() / 自动分区(Partition Key)
    • 常见误区:分区数不是越多越好——每个分区都有管理开销,建议 64~512 个

3.2 向量搜索:search() 详解

  • search() 的完整参数
    • data:查询向量列表(支持批量搜索)
    • anns_field:搜索的向量字段名
    • param:索引参数(如 {"metric_type": "COSINE", "params": {"ef": 100}}
    • limit:返回结果数(Top-K)
    • expr:标量过滤表达式
    • output_fields:返回哪些字段
    • consistency_level:一致性级别
  • 搜索结果解析:距离值、ID、返回字段
  • 批量搜索:一次传入多个查询向量,返回每个查询的 Top-K 结果
  • 搜索参数与索引类型的对应:不同索引类型有不同的搜索参数(HNSW 的 ef、IVFFlat 的 nprobe、IVF_PQ 的 nprobe)

3.3 标量过滤:expr 表达式与混合查询

  • 过滤表达式语法
    • 比较:category == "tech"price < 1000year >= 2024
    • 逻辑:andornot
    • 集合:category in ["tech", "science"]
    • JSON 路径:metadata["author"] == "Alice"metadata["tags"] contains "AI"
    • 数组:array_contains(tags, "AI")array_length(tags) > 2
  • 过滤的执行策略
    • Milvus 2.x:先过滤再搜索(Filter-then-Search)——先根据标量条件缩小候选集,再在候选集中做向量搜索
    • Milvus 2.5+:支持迭代过滤(Iterative Filter)——搜索和过滤交替进行,提升高选择性过滤的性能
  • 过滤性能优化:为高频过滤字段建标量索引(B-tree / Marisa-trie / INVERTED)
  • 与 pgvector 混合查询的对比:pgvector 的 WHERE + ORDER BY 在一条 SQL 中完成,Milvus 的 expr 参数在 search() 中指定——功能等价,表达方式不同

3.4 数据查询、更新与删除

  • query():按标量条件查询,不涉及向量搜索——query(expr="category == 'tech'", output_fields=["content", "category"])
  • get():按主键精确获取——get(ids=[1, 2, 3])
  • upsert():存在则更新,不存在则插入——基于主键判断
  • delete():按主键删除或按表达式批量删除
    • 删除是逻辑删除(标记为已删除),后台 Compaction 时物理清理
    • 删除后空间不会立即释放——需要 compact() + get_compaction_state()
  • 常见误区:频繁小批量 upsert 导致 Segment 碎片化——建议攒够一批再写入,或使用 Auto-Compaction

第4章:索引与性能优化

4.1 索引类型全景:从暴力搜索到磁盘索引

  • 为什么 Milvus 有这么多索引类型:不同数据量、不同内存预算、不同精度要求的最优选择不同

  • 索引类型全景图

    索引类型内存占用构建速度查询速度召回率适用场景
    FLAT无需构建慢(暴力)100%小数据量、基准测试
    IVFFlat中~高通用场景
    HNSW很大很快内存充足、低延迟要求
    IVF_PQ内存有限、大数据量
    IVF_SQ8内存有限、精度可接受损失
    SCANNGoogle 推荐的 ANN 算法
    DiskANN磁盘为主数据量极大、内存有限
    GPU_IVF_PQ极快GPU 服务器、极致吞吐
  • 索引创建流程create_index()load()search()

    • create_index:触发 IndexNode 构建索引
    • load:将索引加载到 QueryNode 内存
    • ⚠️ 不 load 就不能搜索!这是初学者最常犯的错误

4.2 HNSW 索引详解

  • HNSW 原理回顾:多层图结构、O(log N) 搜索、全内存驻留(与 pgvector 的 HNSW 原理相同)
  • Milvus HNSW 参数
    • M:每层最大连接数(默认 16,推荐 16~64)
    • efConstruction:建索引时的搜索宽度(默认 256,推荐 64~512)
    • ef(搜索参数):查询时的搜索宽度(默认 64,推荐 40~512)
  • Milvus HNSW vs pgvector HNSW
    • 参数名不同(M vs m,efConstruction vs ef_construction,ef vs ef_search)
    • Milvus 默认值更激进(efConstruction=256 vs pgvector 的 64)
    • Milvus 支持增量更新,pgvector 也支持
  • HNSW 的内存估算:每条向量约 dim × 4 + M × 2 × 8 字节

4.3 量化索引:PQ / SQ / BQ——用精度换内存

  • 为什么需要量化:10 亿条 768 维 float32 向量 ≈ 2.9TB 原始数据,HNSW 索引约 6~9TB——没有多少服务器能装下。量化把 float32 压缩成更小的表示,内存减少 4~32 倍
  • PQ(Product Quantization)原理
    • 把 768 维向量切成 48 个 16 维子空间
    • 每个子空间用 K-Means 聚类出 256 个中心点(1 字节编码)
    • 原始向量 → 48 字节编码,压缩比 768×4/48 = 64 倍
    • 距离计算用查表代替逐维计算,速度更快
  • SQ8(Scalar Quantization)原理
    • 把每个 float32 压缩成 int8(1 字节)
    • 压缩比 4 倍,精度损失比 PQ 小
    • 实现简单,适合对精度要求稍高的场景
  • BQ(Binary Quantization)原理
    • 把每个 float32 压缩成 1 bit(0 或 1)
    • 压缩比 32 倍,精度损失最大
    • 适合超大规模初筛,再用高精度索引重排
  • 量化索引的选择:内存预算 → 数据量 → 精度要求 → 选择 PQ/SQ/BQ
  • pgvector 不支持量化——这是 Milvus 在大规模场景下的核心优势

4.4 索引选型与参数调优实战

  • 索引选型决策树
    数据量有多大?
    ├─ < 10 万 → FLAT(暴力搜索足够快)
    ├─ 10 万 ~ 1000 万
    │   ├─ 内存充足?→ HNSW(最快、最高召回率)
    │   └─ 内存有限?→ IVF_SQ8 或 IVF_PQ
    ├─ 1000 万 ~ 1 亿
    │   ├─ 内存充足?→ HNSW 或 SCANN
    │   └─ 内存有限?→ IVF_PQ 或 DiskANN
    └─ > 1 亿
        ├─ 内存充足?→ HNSW + 分片
        └─ 内存有限?→ DiskANN 或 IVF_PQ + 分片
  • 索引参数调优方法论
    • 先用默认参数建立基线
    • recall@K 指标评估召回率
    • 调整搜索参数(ef/nprobe)在速度和精度之间找平衡
    • 只有在召回率不达标时才调整构建参数(M/efConstruction/nlist)
  • 标量索引:为高频过滤字段创建标量索引
    • INVERTED:倒排索引,适合等值和范围查询(Milvus 2.5+ 推荐)
    • STL_SORT:排序索引,适合范围查询
    • MARISA-TRIE:前缀索引,适合字符串前缀匹配
  • 常见误区:建了索引但忘记 load()——Milvus 的索引需要显式加载到 QueryNode 内存才能用于搜索

第5章:高级特性

5.1 Partition 分区管理

  • Partition 的作用:把 Collection 按某个维度(时间、分类、租户)物理切分,搜索时只扫描相关分区
  • 手动分区create_partition("partition_name") → 插入时指定 partition_name
  • Partition Key(自动分区):建表时指定某个字段为 Partition Key,Milvus 根据字段值自动路由到对应分区
    python
    FieldSchema("category", DataType.VARCHAR, max_length=64, is_partition_key=True)
  • 分区数量建议:每个 Collection 建议 64~512 个分区,太多会增加协调器负担
  • 分区与多租户:每个租户一个分区,搜索时只查自己的分区——天然的数据隔离
  • 常见误区:把 Partition 当成索引——分区减少的是扫描范围,不是距离计算加速

5.2 多向量搜索与重排序

  • 多向量字段:一个 Collection 可以有多个向量字段——比如文本 embedding 和图像 embedding
  • 多向量搜索(Hybrid Search)
    • 同时搜索多个向量字段,合并结果
    • WeightedRanker:按权重加权合并距离
    • RRFRanker:Reciprocal Rank Fusion,按排名倒数合并——更鲁棒,不需要调权重
  • 重排序(Reranking):先用 ANN 索引快速召回候选集,再用精确距离或交叉编码器重排
    • Milvus 内置的 rerank 参数:搜索时返回更多候选,按精确距离重排
  • 应用场景:多模态搜索(文本搜图)、多语言搜索(不同语言的 embedding 模型)、搜索+推荐融合

5.3 动态字段与 JSON 过滤

  • 动态字段的工作原理:插入时传入 Schema 之外的字段,自动存入 $meta 字段(JSON 格式)
  • JSON 过滤表达式metadata["source"] == "wiki"metadata["tags"] contains "AI"
  • JSON 索引(Milvus 2.5+):为 JSON 字段创建索引加速过滤
    python
    index_params.add_index(field_name="metadata", index_type="INVERTED", index_name="idx_meta")
  • 动态字段 vs 静态标量字段
    • 静态字段:过滤快(有独立索引)、类型严格、Schema 固定
    • 动态字段:灵活(无需预定义)、过滤稍慢、适合 metadata 不确定的场景
  • 常见误区:把所有字段都设成动态字段——过滤性能会显著下降,高频过滤字段应该定义为静态标量字段

5.4 数据一致性与持久化

  • 一致性级别(Consistency Level)
    • Strong:搜索前强制同步所有写入——最慢但最新
    • Bounded:允许一定延迟(默认 180s)——平衡速度和新鲜度
    • Session:同一客户端写入后立即可见——适合单客户端场景
    • Eventually:最终一致,不保证可见性——最快但可能读到旧数据
  • 为什么 Milvus 需要一致性级别:分布式系统中,数据写入后需要时间同步到查询节点——你刚插入的数据可能"暂时搜不到"
  • Flush 与 Compaction
    • flush():强制将缓冲区数据写入持久化存储
    • compact():合并小 Segment、清理已删除数据、优化存储空间
  • 常见误区:插入后立即搜索发现数据"丢了"——其实是数据还在缓冲区,需要 flush 或等待自动同步

第6章:Milvus 在 RAG 系统中的实战

6.1 RAG 架构中 Milvus 的定位

  • Milvus vs pgvector vs Chroma 在 RAG 中的定位差异
    • Chroma:快速原型、小规模验证
    • pgvector:中等规模、需要 SQL 和事务
    • Milvus:大规模生产、需要分布式和量化
  • Milvus 的独特优势
    • 分布式架构 → 水平扩展,数据量无上限
    • 量化索引 → 同等内存下存储更多向量
    • Partition → 多租户天然隔离
    • 多向量搜索 → 多模态 RAG
  • Milvus 的劣势
    • 无 SQL → 不能做 JOIN、子查询、窗口函数
    • 无事务 → 不能保证跨表一致性
    • 运维复杂 → 需要管理多个组件
  • RAG 全链路中 Milvus 覆盖的环节:向量存储 + 向量索引 + 标量过滤 + 多向量检索

6.2 端到端 RAG Demo:大规模文档问答系统

  • 项目结构:数据加载 → 切分 → embedding → 入库 Milvus → 混合检索 → 重排序 → 生成
  • Collection 设计
    python
    fields = [
        FieldSchema("id", DataType.INT64, is_primary=True, auto_id=True),
        FieldSchema("content", DataType.VARCHAR, max_length=65535),
        FieldSchema("source", DataType.VARCHAR, max_length=256),
        FieldSchema("category", DataType.VARCHAR, max_length=64, is_partition_key=True),
        FieldSchema("embedding", DataType.FLOAT_VECTOR, dim=768),
        FieldSchema("metadata", DataType.JSON),
    ]
  • Python 完整实现
    • 文档加载与切分(RecursiveCharacterTextSplitter)
    • Embedding 编码(SentenceTransformers / OpenAI API)
    • 批量入库(分批 insert + flush)
    • 混合搜索(expr 过滤 + 向量搜索)
    • RRF 重排序(多路召回合并)
    • Prompt 组装与 LLM 调用
  • 与 pgvector RAG Demo 的对比:同样的功能,不同的实现方式——pgvector 用 SQL,Milvus 用 Python API

6.3 多租户与权限隔离

  • 多租户的三种方案
    • Partition 隔离:每个租户一个 Partition,搜索时指定 Partition——推荐方案
    • Collection 隔离:每个租户一个 Collection——管理开销大,适合租户数量少的场景
    • 字段过滤:所有租户共享一个 Collection,用 tenant_id == xxx 过滤——最简单但性能最差
  • Partition Key 多租户:Milvus 2.2.9+ 支持自动分区路由,搜索时自动过滤到对应租户的分区
  • RBAC 权限控制(Milvus 2.5+):用户、角色、权限——控制谁能访问哪些 Collection
  • 常见误区:用 Collection 隔离租户但租户数量成千上万——每个 Collection 都有元数据开销,协调器会被压垮

第7章:生产部署与运维

7.1 集群部署方案

  • Milvus Standalone:Docker 单容器,所有组件打包在一起,适合开发和小规模生产
  • Milvus Cluster:Docker Compose / Helm / Milvus Operator,组件独立部署,适合大规模生产
    • Docker Compose:最简单的集群部署方式
    • Helm + Kubernetes:生产级部署,支持自动扩缩容
    • Milv Operator:Kubernetes Operator,声明式管理 Milvus 集群
  • Zilliz Cloud:全托管方案,免运维,按量付费,免费层可用
  • 依赖组件配置
    • etcd:元数据存储,3 节点集群保证高可用
    • MinIO / S3:对象存储,数据持久化
    • Pulsar / Kafka:消息队列,写入缓冲和事件驱动
  • 资源规划
    • QueryNode:内存 = 索引大小 × 副本数 + 预留
    • DataNode:CPU 密集,内存适中
    • IndexNode:CPU + 内存密集,索引构建时资源消耗大

7.2 性能监控与调优

  • Milvus 监控体系:Prometheus + Grafana(官方提供 Dashboard 模板)
  • 关键监控指标
    • 搜索延迟(P50/P95/P99)
    • 搜索 QPS
    • 写入速率
    • QueryNode 内存使用率
    • Segment 数量和大小
    • Compaction 进度
  • 常见性能问题与排查
    • 搜索延迟高 → 检查 QueryNode 内存是否足够、索引参数是否合理
    • 写入吞吐低 → 检查消息队列积压、DataNode 数量是否足够
    • 索引构建慢 → 检查 IndexNode 资源、数据量是否过大
    • 内存持续增长 → 检查是否需要 Compaction、是否有 Segment 碎片化
  • 参数调优
    • search_channels:搜索并发通道数
    • topk_merge_ratio:多分片搜索结果合并策略
    • segment_max_size:Segment 大小上限(影响 Compaction 策略)

7.3 Milvus 的局限性与替代方案

  • 已知局限
    • 无 SQL 支持:不能做 JOIN、子查询、窗口函数——复杂查询需要应用层拼接
    • 无事务保证:不支持跨 Collection 的原子操作
    • 运维复杂度高:分布式组件多(etcd + MinIO + Pulsar + Milvus),排障门槛高
    • 一致性模型较复杂:刚写入的数据可能"搜不到",需要理解一致性级别
    • 小规模场景"杀鸡用牛刀":百万级数据用 Milvus 反而比 pgvector 慢(分布式开销)
  • 何时该用 Milvus
    • 数据量 > 1000 万向量,且持续增长
    • 需要向量量化(PQ/SQ/BQ)节省内存
    • 需要多租户隔离
    • 需要多向量搜索(多模态)
    • 需要水平扩展
  • 何时该换
    • 数据量 < 1000 万 → pgvector 或 Chroma(更简单)
    • 需要 SQL JOIN 和事务 → pgvector
    • 需要多模态内置模型 → Weaviate
    • 需要极致的单机性能 → Qdrant
  • 混合架构:pgvector 处理结构化数据和中等规模向量搜索,Milvus 处理超大规模纯向量搜索——两者互补而非替代

🎯 学习路径建议

向量数据库新手(2-3天):
  第1-2章 → 理解 Milvus 的架构和核心概念
  → 能用 Milvus Lite 创建 Collection、插入数据、执行搜索

RAG 开发者(2-3天):
  第3-4章 → 掌握 CRUD、搜索、索引选型
  → 能用 Milvus 搭建完整的 RAG 检索 pipeline

高级开发者(3-5天):
  第5-6章 → 掌握分区、多向量搜索、多租户、RAG 实战
  → 能设计生产级的 Milvus 数据模型和检索策略

运维工程师(2-3天):
  第7章 → 掌握集群部署、监控、调优
  → 能让 Milvus 集群稳定高效运行

📚 与 Chroma / pgvector 教程的对照阅读

如果你已经学过本系列的 Chroma 或 pgvector 教程,以下是三个教程的核心对照:

概念ChromapgvectorMilvus
数据模型Document (id/text/embedding/metadata)Table Row (id/content/embedding/metadata columns)Entity (id/vector/scalar fields)
集合/表CollectionTableCollection
Schema隐式(自动推断)显式(SQL CREATE TABLE)显式(FieldSchema + CollectionSchema)
距离度量创建时指定(hnsw:space)查询时选择操作符(<->/<=>/<#>)创建时指定(metric_type)
过滤where (Python dict)WHERE (SQL)expr (字符串表达式)
索引自动 HNSW手动 IVFFlat/HNSW手动 FLAT/IVFFlat/HNSW/IVF_PQ/SCANN/DiskANN
向量量化✅ PQ/SQ/BQ
事务完整 ACID无(最终一致性)
分布式✅ 原生分片+副本
多向量搜索✅ Hybrid Search + Reranker
部署嵌入式 / DockerDocker / 云托管 RDSDocker / K8s / Zilliz Cloud
适合规模< 10M 向量< 100M 向量10M ~ 10B+ 向量
核心优势零配置、Python 原生SQL 原生、事务一致性分布式、量化、多向量
学习曲线低(会 SQL 就行)中~高

本大纲遵循以下写作原则:每节以白板式通俗介绍开场 → 深入原理与面试级知识点 → 配合代码示例("比如下面的程序...")→ 覆盖常见用法与误区 → 结尾总结要点衔接下一节。

基于 MIT 许可发布