当前位置: 首页 > news >正文

【RAG】【vector_stores057】MongoDB Atlas向量搜索示例分析

1. 案例目标

本示例展示了如何使用LlamaIndex与MongoDB Atlas向量搜索功能实现文档检索和查询。主要目标包括:

  • 演示如何连接MongoDB Atlas数据库
  • 展示如何创建向量搜索索引
  • 展示如何将文档加载到MongoDB Atlas向量存储中
  • 演示如何执行向量搜索查询
  • 展示如何从向量存储中删除文档

2. 技术栈与核心依赖

LlamaIndex

MongoDB Atlas

PyMongo

核心依赖包:

  • llama-index-vector-stores-mongodb- LlamaIndex的MongoDB向量存储集成
  • llama-index- LlamaIndex核心库
  • pymongo- MongoDB Python客户端

3. 环境配置

3.1 安装依赖

%pip install llama-index-vector-stores-mongodb

!pip install llama-index

3.2 配置MongoDB Atlas连接

import pymongo from llama_index.vector_stores.mongodb import MongoDBAtlasVectorSearch from llama_index.core import VectorStoreIndex from llama_index.core import StorageContext from llama_index.core import SimpleDirectoryReader # MongoDB Atlas连接URI mongo_uri = ( "mongodb+srv://:@?retryWrites=true&w=majority" ) mongodb_client = pymongo.MongoClient(mongo_uri)

注意:在使用MongoDB Atlas之前,需要创建一个Atlas搜索索引。请参考MongoDB文档:创建Atlas向量搜索索引

4. 案例实现

4.1 下载和准备数据

下载Uber 2021年10-K报告作为示例数据:

# 创建数据目录 !mkdir -p 'data/10k/' # 下载Uber 2021年10-K报告 !wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/examples/data/10k/uber_2021.pdf' -O 'data/10k/uber_2021.pdf'

4.2 创建向量存储和索引

创建MongoDB Atlas向量搜索存储,并设置向量搜索索引:

# 创建MongoDB Atlas向量搜索存储 store = MongoDBAtlasVectorSearch(mongodb_client) # 创建向量搜索索引 store.create_vector_search_index( dimensions=1536, path="embedding", similarity="cosine" ) # 创建存储上下文 storage_context = StorageContext.from_defaults(vector_store=store)

4.3 加载文档并构建索引

使用SimpleDirectoryReader加载PDF文档,并构建向量索引:

# 加载Uber 2021年10-K报告 uber_docs = SimpleDirectoryReader( input_files=["./data/10k/uber_2021.pdf"] ).load_data() # 创建向量索引 index = VectorStoreIndex.from_documents( uber_docs, storage_context=storage_context )

4.4 执行查询

使用查询引擎执行查询:

# 查询Uber的收入 response = index.as_query_engine().query("What was Uber's revenue?") display(Markdown(f"{response}"))

4.5 文档管理

展示如何检查和删除向量存储中的文档:

from llama_index.core import Response # 检查初始文档数量 print(store._collection.count_documents({})) # 获取参考文档ID typed_response = ( response if isinstance(response, Response) else response.get_response() ) ref_doc_id = typed_response.source_nodes[0].node.ref_doc_id # 检查特定参考文档的节点数量 print(store._collection.count_documents({"metadata.ref_doc_id": ref_doc_id})) # 删除文档 if ref_doc_id: store.delete(ref_doc_id) print(store._collection.count_documents({}))

5. 案例效果

本示例展示了MongoDB Atlas向量搜索的基本功能和效果:

  • 向量索引创建:成功创建了1536维的向量索引,使用余弦相似度
  • 文档加载:成功将Uber 2021年10-K报告加载到向量存储中
  • 查询功能:成功查询到Uber 2021年的收入为174.55亿美元
  • 文档管理:成功展示了文档计数和删除功能

MongoDB Atlas向量搜索的优势:

  • 与MongoDB生态系统无缝集成
  • 支持混合查询(向量搜索和传统数据库查询)
  • 提供可扩展的云原生解决方案
  • 支持多种相似度计算方法

6. 案例实现思路

本案例的实现思路如下:

  1. 环境准备:安装必要的依赖包,配置MongoDB Atlas连接
  2. 数据准备:下载并准备示例文档(Uber 2021年10-K报告)
  3. 向量存储配置:创建MongoDB Atlas向量搜索存储,设置向量索引
  4. 索引构建:加载文档并构建向量索引
  5. 查询执行:使用查询引擎执行向量搜索查询
  6. 文档管理:展示文档计数和删除功能

关键技术点:

  • 使用MongoDB Atlas作为向量存储后端
  • 创建向量搜索索引时指定维度、路径和相似度度量
  • 通过ref_doc_id管理文档的多个节点
  • 使用delete方法按ref_doc_id删除整个文档

7. 扩展建议

  • 元数据过滤:实现基于元数据的过滤查询功能
  • 混合搜索:结合向量搜索和传统MongoDB查询实现混合搜索
  • 批量操作:优化批量文档添加和删除的性能
  • 索引优化:针对特定应用场景优化向量索引参数
  • 多租户支持:实现多租户环境下的数据隔离
  • 实时更新:实现向量索引的实时更新功能
  • 性能监控:添加查询性能监控和分析功能

8. 总结

本示例详细介绍了如何使用LlamaIndex与MongoDB Atlas向量搜索功能实现文档检索和查询。MongoDB Atlas向量搜索提供了一种将向量搜索功能集成到现有MongoDB应用中的简便方法,特别适合已经使用MongoDB作为主数据库的应用场景。

通过本示例,我们学习了:

  • 如何连接MongoDB Atlas并创建向量搜索索引
  • 如何将文档加载到MongoDB Atlas向量存储中
  • 如何执行向量搜索查询
  • 如何管理向量存储中的文档

这些技术可以应用于各种需要向量搜索功能的场景,如文档检索系统、推荐引擎、语义搜索等,为用户提供更智能、更相关的搜索体验。

http://www.jsqmd.com/news/651859/

相关文章:

  • 如何在Unity中快速集成专业图表:XCharts完整入门指南
  • 对于Gee的看法
  • 7864352
  • 告别‘传数据’:用Transformer和CNN手把手搭建一个能‘传想法’的语义通信Demo
  • 从零到一:基于PyTorch的CenterNet目标检测实战平台搭建指南
  • WMMAVYUXUANSYS/育轩:重塑校园会议与教育音频管理新范式
  • 深度体验:当 GPTcodex 额度用光后,我找到了更香的替代方案
  • C# Socket编程实战:构建稳定TCP双向通信应用
  • 3个步骤彻底解决显卡驱动问题:Display Driver Uninstaller完全指南
  • 基于STM32F103的3.6kW全桥逆变器资料集:并网充电放电、自动切换及全方位保护
  • pytest后置处理方式
  • Blaster防作弊思路
  • 西安 GEO 优化收费标准解析与实施方案
  • 不止于初始化:在Vue3 + Cesium项目中配置ArcGIS底图、透明背景与交互事件的完整流程
  • 微信小程序 H5 预加载进阶:从原理到性能调优的完整实践
  • 2026年3月专业的焊接加工供应商推荐,机加工/焊接加工/大车床加工/大件加工/精密零件加工,焊接加工实力厂家口碑推荐 - 品牌推荐师
  • 深度学习异常检测Anomalib算法训练+推理+转化+onnx
  • 图像处理小白必看:低通、高通、带通、带阻滤波器到底怎么选?
  • 基于SQLite消息队列的微信机器人架构设计与实现
  • 终极指南:如何让Zotero在Word中引用更简单清晰
  • 2026摩擦电触觉传感器行业发展分析:技术迭代与市场新机遇
  • AI电商详情页生成落地指南(SITS2026内部验证版):5类高危失效场景+4个不可绕过的合规校验点
  • Prompt-Tuning不只是省参数:它在领域迁移和模型集成上居然这么强?
  • Vivado卸载程序不见了?别慌,用这个隐藏参数5分钟搞定(附SDK/HLS清理)
  • Vue3 + Element Plus 项目里,用 ECharts 5 画一个动态更新的班级数据看板
  • 10分钟极速语音克隆:RVC变声器完全指南
  • 【Cesium开发指南】Vue3 + Vite + TypeScript 一站式三维地球应用脚手架构建
  • Visual Studio+NXOpen避坑指南:UG二次开发中DLL生成与集成的5个关键步骤
  • 2026年3月树坑石厂商推荐,路沿石/火烧板/路牙石/树坑石/道牙石/花岗岩石材/蘑菇石/石材,树坑石厂家哪家靠谱 - 品牌推荐师
  • Python自动化:调用企业微信API高效发送邮件通知