数据库
在 MongoDB 中实现全文、向量与混合搜索时如何选型…
当需要为 MongoDB 数据构建关键词、模糊、自动补全、语义相似或混合搜索时,指导选型、创建索引并优化查询。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在 MongoDB 中实现全文、向量与混特定
解决思路
- 先理解再构建:验证用户用例,确保推荐正确的搜索方案。
- 始终先检查:在给出建议前先查看现有索引和 schema。
- 先解释再执行:说明将要创建的索引,并要求用户明确批准。
- 针对用例优化:不同用例需要不同的索引配置和查询模式。
- 处理只读场景:如果没有 create、update、delete 操作工具,则处于只读模式,提供完整的索引配置 JSON,让用户自行创建(包括通过 Atlas UI)。
- 用通俗语言解释:把技术概念和业务需求映射为用户能理解的技术实现。
- 发现阶段检查环境:用 list-databases 和 list-collections 了解可用数据;用户提到集合时用 collection-schema 检查字段结构;用 collection-indexes 查看现有索引;用 atlas-inspect-cluster 确定集群的 MongoDB 版本。
- 理解用例:若请求模糊,提出澄清问题,从 schema 推断可能的集合和字段,并在继续前确认理解。
- 常见澄清问题包括:用户搜索什么(产品、电影、文档等)?哪些字段包含可搜索内容?是按自由文本搜索,还是按与现有条目的相似度搜索(例如“给定电影 A,找相似电影”)?需要精确匹配、模糊匹配还是语义相似?需要过滤器(价格区间、类别、日期)吗?需要自动补全/即时搜索吗?用户是否已生成向量嵌入,还是希望 MongoDB 自动处理?
- 确定搜索类型并查阅参考文件:将用例匹配到搜索类型,然后在推荐索引或查询前查阅对应参考文件;每个参考文件也记录必须先验证的前置条件(集群层级、MongoDB 版本、部署要求)。
- Atlas Search(词法/全文):适用于关键词匹配与相关性评分、容错模糊匹配、自动补全/即时搜索、带过滤器的分面搜索、语言特定文本分析、基于 token 的搜索、带视图的词法搜索;查阅 references/lexical-search-indexing.md(索引)和 references/lexical-search-querying.md(查询)。
- Automated Embedding(语义搜索,无需嵌入代码):适用于无需编写嵌入代码的语义/向量搜索、没有现有向量流水线或嵌入基础设施、快速设置(MongoDB 使用 Voyage AI 模型自动生成和管理嵌入)、已存储在 Atlas 中并希望按含义搜索的文本数据、需要最小化设置的 RAG 或 AI agent 记忆;查阅 references/automated-embedding.md,并在创建索引或查询前验证其集群前置条件(层级、部署、自动扩缩容)。
- Vector Search(语义搜索,自带嵌入):适用于使用自己预生成嵌入的语义相似度、Voyage AI 未提供的特定嵌入模型、图像/音频/多模态嵌入(Automated Embedding 仅支持文本)、未配置 Voyage AI API key 的自管理 MongoDB、带视图的向量搜索;查阅 references/vector-search.md。
- Hybrid Search:适用于组合多种搜索方法(例如向量 + 词法、多个文本搜索)、类似“查找与‘史诗太空战斗’相似的动作电影”的查询(结合关键词过滤与语义相似度)、结果需要考虑多个相关性标准;使用 $rankFusion(基于排名)或 $scoreFusion(基于分数)合并流水线;查阅 references/hybrid-search.md 并在构建前验证其版本要求(同时查阅词法/向量文件以了解各流水线阶段)。
- 创建索引:1)用通俗语言解释索引配置;2)展示 JSON 结构;3)询问用户想给索引取什么名字;4)获得明确批准:“Should I create this index?”;5)批准后使用 MCP 的 create-index 工具;6)在只读模式下,提供完整索引 JSON 供通过 Atlas UI 创建。
- 运行查询:1)展示聚合流水线;2)使用 MCP 的 aggregate 工具执行;3)清晰呈现结果。
- 优化现有查询:1)请用户分享当前查询;2)与相关参考文件中的查询模式和最佳实践对比;3)提出具体改进,并给出前后对比示例;4)用 aggregate 运行修订后的查询以验证结果。
- 避免反模式:绝不要为搜索用例推荐 $regex 或 $text;两者都缺少搜索工作负载所需的相关性评分、模糊匹配和语言感知分词;如果用户要求其中任一,解释为什么 Atlas Search 更合适,并展示等价模式。
- 处理边界情况——用户提到找不到的字段:用 collection-schema 检查可用字段,建议替代方案或请求澄清。
- 处理边界情况——必需字段不存在:解释需要添加什么以及如何添加(例如向量搜索的嵌入字段)。
- 处理边界情况——查询失败或索引缺失:用 collection-indexes 验证索引是否存在;如果缺失,解释需要先创建索引。
- 处理边界情况——多个集合相关:列出选项并询问用户指的是哪一个;如果上下文明显,确认你的假设。
适用边界 · 注意事项
- 用户没有 MongoDB Atlas 或 MongoDB MCP server 时(本技能依赖 Atlas Search/Vector Search 与 MCP 工具)。
- 需要自管理 MongoDB 且未配置 Voyage AI API key 时,无法使用 Automated Embedding。
- 用户只需要简单精确匹配或不需要相关性评分、模糊匹配、语义相似度时,不必引入 Atlas Search/Vector Search。