开通节点与使用
更新时间:2026-03-13
本文档介绍如何在 MongoDB 实例中开通 mongot 搜索节点,并提供 全文索引与向量索引的创建及使用示例。
背景介绍
MongoDB Search 向量搜索是一种基于数据语义或潜在含义返回结果的搜索方式。
与依赖关键词匹配的传统全文检索不同,向量搜索通过在 多维向量空间 中查找与查询向量距离最接近的数据,从而识别语义上的相似性。向量之间的距离越近,其表达的语义相关性也越高。
MongoDB 通过在数据库实例中引入专用的 搜索节点(mongot),提供 MongoDB Search 能力,使数据库可以作为 向量数据库 使用。用户不仅可以基于数据语义进行相似度检索,还可以将 向量搜索与全文搜索能力结合,实现更加智能和灵活的检索体验。
计费说明
MongoDB Search功能当前处于邀请测试阶段。您可以通过提交工单或联系对应TAM申请试用。
在此期间,开通并使用功能不收取mongot搜索节点费用,只需支付MongoDB主实例的费用。
适用范围
- 当前仅 MongoDB 8.2版本的副本集实例 支持创建 mongot 搜索节点。
- 测试阶段有如下功能暂不支持:
| 模块 | 功能 | 预计完善时间 |
|---|---|---|
| mongot | 单节点副本集暂不支持 mongot 节点 | - |
| 分片集暂不支持 mongot 节点 | - | |
| 暂不支持维护时间内创建 mongot 节点 | - | |
| 创建实例时不支持同步创建 mongot 节点 | - | |
| 开通 mongot 节点后不支持变更子网 | - | |
| 开通 mongot 节点后不支持迁移可用区 | - | |
| 开通 mongot 节点后不支持修改端口号 | - | |
| 8.2 | 审计日志 | 3.31 |
| 备份管理 | 3.31 |
操作指南
操作示例通过 MongoDB Shell(mongosh) 或兼容的 MongoDB 驱动程序完成。
创建mongot节点
- 登录 MongoDB 管理控制台。
- 在页面左上角,选择实例所在的地域。
- 在左侧导航栏,访问 副本集实例列表。
- 找到目标实例,单击 实例名称。
- 在实例 MongoDB Search 中,点击 开通节点,并等待节点开通完成。
连接mongot节点
使用 mongosh 或应用程序连接目标 MongoDB 实例,连接方式请参考 通过MongoShell连接实例。
注意
自 MongoDB 6.0 起,
mongoShell 已被移除,请使用mongosh执行连接与相关操作。
创建和使用索引
本示例演示如何在items集合中创建并使用 全文索引 与 向量索引。
插入测试数据
Bash
1db.items.insertMany([
2{
3 _id: 1,
4 title: "MongoDB Vector Search",
5 body: "MongoDB supports vector similarity search",
6 category: "tech",
7 ts: new Date(),
8 embedding: [0.1, 0.2, 0.3 /* ... 继续到 768 个数字 */ ]
9},
10... //建议批量生成,上述单条数据仅供参考格式
11])
创建全文Search索引
Bash
1db.items.createSearchIndex(
2 "txt_idx", // 索引名称
3 "search", // 索引类型
4 {
5 mappings: {
6 dynamic: false,
7 fields: {
8 title: { type: "string" }, // 标题全文检索
9 body: { type: "string" }, // 内容全文检索
10 category: { type: "token" }, // 分类过滤
11 ts: { type: "date" } // 时间过滤
12 }
13 }
14 }
15)
验证全文检索
Bash
1db.items.aggregate([
2{
3 $search: {
4 index: "txt_idx",
5 text: {
6 query: "mongot", // 要搜索的关键词
7 path: ["title","body"] // 指定搜索字段
8 }
9 }
10},
11{
12 $project: { // 控制返回字段
13 title: 1,
14 body: 1,
15 score: { $meta: "searchScore" }
16 }
17}
18])
创建向量索引
Bash
1db.items.createSearchIndex(
2 "vec_idx", // 索引名称
3 "vectorSearch", // 索引类型
4 {
5 fields: [
6 {
7 type: "vector",
8 path: "embedding", // 向量字段
9 numDimensions: 768, // 向量维度
10 similarity: "cosine" // 相似度算法
11 }
12 ]
13 }
14)
验证向量相似度搜索
Bash
1const QUERY_EMBEDDING = [0.12, 0.2, 0.3,... ]; // 示例向量
2db.items.aggregate([
3{
4 $vectorSearch: { // 向量相似度搜索
5 index: "vec_idx", // 向量索引名称
6 path: "embedding", // 向量字段
7 queryVector: QUERY_EMBEDDING,
8 numCandidates: 10, // 初步检索的候选数量
9 limit: 3 // 返回最相似的前K条文档(TopK)
10 }
11},
12{
13 $project: { // 控制返回字段
14 title: 1,
15 category: 1,
16 score: { $meta: "vectorSearchScore" } // 向量相似度得分
17 }
18}
19])
