Milvus——向量索引 :IVF_FLAT

1. 什么是倒排索引?

传统的索引(正排索引)是:文档 -> 关键词列表。

例如:

  • 文档1: {"我", "喜欢", "机器学习"}

  • 文档2: {"我", "爱", "深度学习"}

倒排索引 是:关键词 -> 文档列表。

  • "我": {文档1, 文档2}

  • "喜欢": {文档1}

  • "机器学习": {文档1}

  • "爱": {文档2}

  • "深度学习": {文档2}

在搜索引擎中,这让你能快速找到包含某个关键词的所有文档。

2. IVF_FLAT 如何应用倒排索引?

在向量搜索的上下文中,IVF_FLAT 将这个概念从"关键词"迁移到了"聚类中心"。

它的工作流程分为两步:

第一步:索引构建(创建倒排索引)

  1. 聚类 : 首先,使用 K-Means 等算法对整个向量数据集进行聚类,得到 nlist 个聚类中心。例如,你有100万个向量,设置 nlist 为1000,就会得到1000个聚类中心。

  2. 分配向量到桶中 : 对于数据集中的每一个向量,计算它与所有聚类中心的距离,并将其分配到距离最近的那个聚类中心所代表的"桶"中。

  3. 形成倒排列表 : 现在,每个聚类中心(类似于"关键词")都对应了一个列表,这个列表里包含了所有属于这个聚类的向量ID(以及向量本身)。这就是倒排索引

    • 聚类中心1 -> {向量ID_1, 向量ID_100, ...}

    • 聚类中心2 -> {向量ID_5, 向量ID_3000, ...}

    • ...

    • 聚类中心1000 -> {向量ID_800000, ...}

第二步:搜索(使用倒排索引)

  1. 粗筛 : 当来了一个查询向量时,系统计算它与所有 nlist 个聚类中心的距离。

  2. 选择最相似的桶 : 选择距离最近的 nprobe 个聚类中心。nprobe 是一个重要参数,比如 nprobe=10,就意味着我们只查看与查询向量最相似的10个聚类中心对应的桶。

  3. 精细搜索 : 将这 nprobe 个桶中的所有向量(在FLAT中,就是原始向量)拿出来,与查询向量进行精确的距离计算(例如,计算欧氏距离或内积)。

  4. 返回结果: 最后,在这些被粗筛出来的候选向量中,找出距离最近的K个向量作为最终结果。

总结与类比

领域 "关键词" "文档列表" 目的
文本搜索 单词(如"机器学习") 包含该单词的文档ID列表 快速定位相关文档,避免全表扫描
向量搜索(IVF) 聚类中心 属于该聚类的向量ID列表 快速定位可能相似的向量,避免与全量向量计算距离

所以,IVF_FLAT 的本质就是:

  • IVF : 代表了使用倒排索引 的聚类思想,用于快速缩小搜索范围,这是一种"粗粒度"的检索。

  • FLAT : 代表了在缩小范围后,使用原始、未压缩的向量 进行精确计算,这是一种"细粒度"的比对。

正是这种结合,使得 IVF_FLAT 在大规模数据集上既能保证较高的召回率和精度,又能极大地提升搜索速度。如果没有倒排索引(IVF部分),每次搜索都需要进行"暴力扫描",计算查询向量与数据库中每一个向量的距离,这在数据量巨大时是无法接受的。

相关推荐
uncle_ll1 天前
Milvus介绍及多模态检索实践:从部署到实战全解析
milvus·多模态·向量数据库·ann·rag·搜索·检索
失忆爆表症2 天前
01_项目搭建指南:从零开始的 Windows 开发环境配置
windows·postgresql·fastapi·milvus
dblens 数据库管理和开发工具4 天前
开源向量数据库比较:Chroma, Milvus, Faiss,Weaviate
数据库·开源·milvus·faiss·chroma·weaviate
玄同7655 天前
数据库全解析:从关系型到向量数据库,LLM 开发中的选型指南
数据库·人工智能·知识图谱·milvus·知识库·向量数据库·rag
自可乐5 天前
Milvus向量数据库/RAG基础设施学习教程
数据库·人工智能·python·milvus
领航猿1号11 天前
Langchain 1.0.2 从入门到精通(含基础、RAG、Milvus、Ollama、MCP、Agents)
langchain·agent·milvus·rag·mcp·langchain 1.0
Knight_AL12 天前
Docker 部署 Milvus 并连接现有 MinIO 对象存储
docker·eureka·milvus
码农阿豪12 天前
基于Milvus与混合检索的云厂商文档智能问答系统:Java SpringBoot全栈实现
java·spring boot·milvus
GeminiJM12 天前
亿级向量检索:Elasticsearch vs. Milvus,性能鸿沟与架构抉择
elasticsearch·架构·milvus
福大大架构师每日一题14 天前
milvus v2.6.9 发布:支持主键搜索、段重开机制、日志性能全面提升!
android·java·milvus