跳到正文

更多文章

影响力日常操作系统:21天习惯养成计划 从技能雇佣者到价值创造者 互惠账户的运营 影响力的三层架构 组织的注意力经济学
数据分析师与AI工程师如何用向量数据库实现语义搜索

本文来源于数据从业者全栈知识库,更多体系化内容请访问知识库。

为什么向量数据库突然火了?

在 大语言模型 时代,向量数据库成为了关键基础设施:

应用场景为什么需要向量数据库
RAG系统检索与问题语义相关的文档 → 详见RAG
推荐系统找到与用户兴趣相似的内容
图片搜索用”意思”而非标签找图片
相似检测查重、抄袭检测、重复内容识别
Agent记忆为AI Agent提供长期记忆 → 详见Agent

一、什么是向量和向量搜索?

1.1 从文字到向量

问题:计算机不理解文字的”意思”,只能做字符串匹配。

解决方案:把文字转换成一串数字(向量),让计算机能计算”意思相近程度”。

实际的向量通常有几百到几千维,由 深度学习模型 自动学习。

1.2 向量搜索的原理

graph LR
    A[查询文本] --> B[向量化]
    B --> C[查询向量]
    C --> D[计算相似度]
    E[文档库] --> F[向量化]
    F --> G[向量索引]
    G --> D
    D --> H[返回最相似的结果]

核心步骤

  1. 把查询文本转成向量
  2. 在向量库中找到最”接近”的向量
  3. 返回对应的原始内容

1.3 相似度计算方法

方法原理适用场景
余弦相似度计算两个向量的夹角最常用,对长度不敏感
欧氏距离计算空间中的直线距离对绝对值敏感的场景
内积向量点乘已归一化的向量

二、Embedding:把万物变成向量

2.1 什么是Embedding?

Embedding = 把高维、离散的数据(文字、图片、音频)转换成低维、连续的向量表示。

graph TD
    subgraph "输入"
        A[文本]
        B[图片]
        C[音频]
    end

    subgraph "Embedding模型"
        D[文本Embedding模型]
        E[图像Embedding模型]
        F[音频Embedding模型]
    end

    subgraph "输出向量"
        G[768维向量]
        H[512维向量]
        I[256维向量]
    end

    A --> D --> G
    B --> E --> H
    C --> F --> I

2.2 文本Embedding模型

模型维度特点推荐场景
OpenAI text-embedding-31536/3072效果最好,需付费商业应用
BGE-large-zh1024中文效果优秀,开源中文场景首选
M3E-base768中文优化,轻量资源有限场景
Cohere multilingual1024多语言支持好跨语言场景
sentence-transformers384-768开源、选择多研究和实验

2.3 Embedding的质量评估

评估维度说明测试方法
语义相似度意思相近的文本,向量是否接近相似句子对测试
区分度不同主题的文本,向量是否分开聚类可视化
领域适配在特定领域的表现领域数据集测试
多语言跨语言语义对齐翻译对测试

三、向量数据库核心概念

3.1 为什么需要专门的向量数据库?

传统数据库可以存向量,但:

对比项传统数据库存向量专业向量数据库
搜索速度慢(需遍历计算)快(专用索引)
海量数据性能急剧下降设计支持亿级
内存优化无针对性优化向量压缩、分片
相似度查询需自己实现原生支持

3.2 核心概念

概念说明类比传统数据库
Collection向量的集合表(Table)
Vector存储的向量数据行(Row)
Dimension向量的维度列的数量
Index加速搜索的索引结构索引(Index)
Metadata向量附带的属性信息字段(Column)

3.3 向量索引类型

不同的索引在速度、精度、内存之间做权衡:

索引类型原理特点适用场景
Flat暴力搜索,无索引100%精确,最慢小数据集、对精度要求极高
IVF先聚类,再在簇内搜索速度快,精度略降通用场景
HNSW构建多层图结构速度快,内存大高性能需求
PQ向量压缩后搜索节省内存,精度降超大规模、内存受限

四、主流向量数据库对比

4.1 对比总览

数据库类型特点适合场景
Milvus开源/云分布式、功能全面、性能强大规模生产环境
Pinecone云托管全托管、易用、稳定快速上手、中小规模
Chroma开源轻量、嵌入式、易集成开发测试、小项目
Weaviate开源/云支持混合搜索、GraphQL需要关键词+语义
Qdrant开源/云Rust实现、性能好性能敏感场景
FaissFacebook出品、纯算法库嵌入现有系统
pgvector扩展PostgreSQL扩展已有PG生态

4.2 选择决策树

graph TD
    A[选择向量数据库] --> B{是否需要云托管?}
    B -->|是| C{预算充足?}
    C -->|是| D[Pinecone]
    C -->|否| E[Milvus Cloud / Weaviate Cloud]

    B -->|否| F{数据规模}
    F -->|小<100万| G[Chroma / Faiss]
    F -->|中100万-1亿| H[Milvus / Qdrant]
    F -->|大>1亿| I[Milvus集群]

    G --> J{是否需要持久化?}
    J -->|是| K[Chroma]
    J -->|否| L[Faiss]

4.3 各数据库详解

Milvus

优点

  • 分布式架构,支持水平扩展
  • 多种索引类型可选
  • 生态完善,文档丰富
  • 支持混合搜索(向量+标量过滤)

缺点

  • 部署相对复杂
  • 资源消耗较大

Pinecone

优点

  • 全托管,无需运维
  • 开箱即用,API简洁
  • 性能稳定

缺点

  • 费用较高
  • 无法私有部署
  • 定制性有限

Chroma

优点

  • 极其轻量,pip安装即用
  • 嵌入式,无需单独部署
  • 与LangChain等框架集成好

缺点

  • 大规模性能有限
  • 功能相对简单

pgvector

优点

  • 直接利用现有PG
  • SQL语法熟悉
  • 事务支持

缺点

  • 大规模性能不如专业向量库
  • 索引类型有限

五、语义搜索实践

5.1 语义搜索 vs 关键词搜索

对比维度关键词搜索语义搜索
原理字符串匹配向量相似度
”退款流程”能找到”退货步骤”不能
精确匹配可能漏掉
同义词处理需人工维护自动理解
跨语言不支持天然支持

5.2 混合搜索策略

graph TD
    A[用户查询] --> B[语义搜索]
    A --> C[关键词搜索]
    B --> D[语义结果Top50]
    C --> E[关键词结果Top50]
    D --> F[结果融合]
    E --> F
    F --> G[重排序]
    G --> H[最终结果Top10]

结果融合方法

方法说明适用场景
加权求和语义分数×0.7 + 关键词分数×0.3简单有效
RRF倒数排名融合不需要调参
交叉重排用LLM或专用模型重新排序追求最优效果

5.3 提升搜索效果的技巧

技巧一:优化文本切片

问题症状解决方案
切片太大检索不精准缩小切片,300-500字
切片太小信息不完整加大切片,保持语义完整
边界切断关键信息答案不完整使用滑动窗口,保留重叠

技巧二:查询扩展

用户的查询往往不够”好”,可以:

技术说明
同义词扩展”退款” → “退款”、“退货”、“取消订单”
HyDE先让LLM生成假设答案,用答案搜索
多查询将原问题改写成多个角度的查询

技巧三:元数据过滤

在向量搜索前/后,用元数据缩小范围:

场景过滤条件
产品知识库按产品类别过滤
文档问答按时间范围过滤
多租户系统按租户ID过滤

六、向量数据库的运维要点

6.1 数据管理

操作注意事项
插入批量插入比单条效率高得多
更新通常需要先删后插
删除考虑软删除,避免索引频繁重建
增量更新设计好增量同步机制

6.2 性能优化

graph TD
    A[性能优化方向] --> B[索引优化]
    A --> C[查询优化]
    A --> D[资源配置]

    B --> B1[选择合适的索引类型]
    B --> B2[调整索引参数]
    B --> B3[定期重建索引]

    C --> C1[合理设置Top-K]
    C --> C2[使用元数据过滤]
    C --> C3[批量查询]

    D --> D1[内存配置]
    D --> D2[CPU/GPU资源]
    D --> D3[分片策略]

6.3 常见问题排查

问题可能原因解决方案
搜索结果不准Embedding模型不合适换用更好的模型
搜索太慢索引配置不当调整索引参数或类型
内存不足数据量太大使用PQ压缩或分片
结果不稳定相似度阈值设置不当调整阈值或增加结果数量

七、应用案例

7.1 RAG知识库问答

graph LR
    A[用户问题] --> B[向量化]
    B --> C[向量数据库检索]
    C --> D[获取相关文档]
    D --> E[构建Prompt]
    E --> F[LLM生成答案]

向量数据库在RAG中的作用

  • 存储文档切片的向量
  • 快速检索语义相关内容
  • 支持元数据过滤(按来源、时间等)

7.2 智能推荐系统

推荐类型向量来源应用
相似商品商品描述的向量”猜你喜欢”
相似内容文章/视频的向量内容推荐
相似用户用户行为的向量协同过滤

7.3 图片搜索

graph TD
    A[图片库] --> B[图像Embedding模型]
    B --> C[图片向量]
    C --> D[向量数据库]

    E[查询图片/文本] --> F[向量化]
    F --> G[相似度搜索]
    D --> G
    G --> H[返回相似图片]

7.4 重复检测与去重

场景应用
内容去重新闻聚合、论坛帖子去重
抄袭检测论文查重、代码相似度
数据清洗识别重复记录

八、本章小结


选型速查表

场景推荐选择
快速原型/小项目Chroma
生产环境/中等规模Milvus Lite 或 Qdrant
大规模/企业级Milvus集群
不想运维Pinecone
已有PostgreSQLpgvector
需要最高性能Milvus + GPU


本文节选自数据从业者全栈知识库。知识库包含 2300+ 篇体系化技术文档,覆盖数据分析、数据工程、数据治理、AI 等全栈领域。了解更多 ->

Elazer (石头)
Elazer (石头)

11 年数据老兵,从分析师到架构专家。用真实经历帮数据人少走弯路。

加入免费社群

和数据从业者一起交流成长

了解详情 →

成为会员

解锁全部内容 + 知识库

查看权益 →
← 上一篇 数据分析师 L3:高级专家 下一篇 → 技术很强却总被忽视?L3 数据分析师的真正瓶颈