您可以在 视图上创建MongoDB Vector Search索引来转换文档和集合,以便对集合进行部分索引、支持不兼容的数据类型或数据模型等。
以下示例使用 sample_mflix 示例数据库。
要求
您必须使用 MongoDB 8.0 或更高版本。
在 MongoDB v8.0+ 上:
使用Atlas用户界面或Atlas管理API在视图上创建MongoDB Vector Search 索引。
针对源集合运行MongoDB Vector Search 查询。参考在视图上创建的MongoDB Vector Search索引。 这些查询返回源集合中出现的原始文档。
在 MongoDB v8.1+ 上,您还可以:
使用
mongosh和驱动程序方法、db.collection.createSearchIndex()、db.collection.updateSearchIndex()、db.collection.dropSearchIndex()和$listSearchIndexes在视图上创建和管理MongoDB Vector Search 索引。针对该视图运行MongoDB Vector Search 查询。
限制
MongoDB Vector Search 支持具有以下阶段的视图:
索引名称在源集合及其所有视图中必须是唯一的。
MongoDB Vector Search 不支持使用会生成动态结果的操作符的视图定义,例如 $$USER_ROLES 系统变量 和
$rand聚合操作符。MongoDB Vector Search 查询会返回源集合中出现的原始文档。
示例:过滤文档
要创建视图,您必须拥有 createCollection 权限。
您可以使用过滤器筛选文档以对集合进行部分索引。以下示例在 sample_mflix.embedded_movies 集合上创建一个视图,以便仅对具有向量嵌入字段的文档进行索引。
性能考虑因素
高度复杂的视图转换会增加索引和查询时间。这是因为mongod 在索引期间(初始同步和稳态复制)筛选和转换oplog条目时,以及在查询时将这些转换应用于返回的文档时,必须读取视图定义。
请考虑创建物化视图以避免Atlas上的额外的复制负载。您还可以直接查询源集合,以避免视图转换造成的查询延迟。
故障排除
索引更改为 FAILED
在以下场景中,索引会更改为 FAILED 状态:
您在与MongoDB Vector Search 不兼容的视图上创建的索引。
您编辑视图的方式不符合MongoDB Vector Search 兼容性要求。
您删除或更改视图的源集合。
例如,如果一个视图是在另一个视图上创建的,并且将父视图源更改为另一个集合。
注意
如果一个视图是其他视图的后代,这一限制也同样适用。例如,您无法更改或移除所有后代所源自的源集合。
索引更改为 STALE
在以下场景中,索引会更改为 STALE 状态:
警告
如果在视图中定义的聚合管道与集合中的文档不兼容,搜索复制将失败。例如,如果 $toDouble 表达式对包含数组的文档字段进行操作,复制将失败。确保您的视图在处理集合中的所有文档时不会出错。
如果视图定义导致聚合失败,而索引为
READY,则索引变为STALE。解析文档或更改视图定义以使其不再失败后,索引将返回到READY。当为STALE时,索引仍然可查询。如果索引脱离oplog,则会触发索引重建。如果视图定义在索引为
BUILDING时导致聚合管道失败,则在修复文档之前,则索引生成将停滞。在您解析文档或更改视图定义后,索引将返回到READY,以确保不再失败。
您可以在Atlas用户界面的索引状态详细信息页面查看索引状态。
错误:$search 仅作为管道中的第一阶段有效
当您使用 8.1 之前的MongoDB版本查询视图时,会出现此错误。
如果您使用 8.0 之前的MongoDB版本,我们建议您升级到 8.1+ 以直接查询视图。您可以升级到 8.0 来查询源集合。
如果使用MongoDB 8.0,则必须针对源集合查询视图索引。示例,对集合而不是视图运行
.aggregate()。
索引流程
当您在视图上创建MongoDB Vector Search索引时,mongot进程执行的任务与您在常规集合上创建MongoDB Vector Search索引时相同。mongot进程:
根据集合索引定义中的规则创建MongoDB Vector Search 索引。
监控变更流以了解您为其定义了MongoDB Vector Search 索引的集合的文档和索引的当前状态。
处理MongoDB Vector Search 查询,并将匹配文档的文档ID 和其他搜索元数据返回给
mongod,后者执行完整文档查找并将结果返回给客户端。
当您在视图上创建MongoDB向量搜索索引时,会在步骤 1 和 2 期间应用视图定义,并且转换后的文档会根据搜索索引定义进行索引,然后存储在磁盘上。
了解详情
要了解有关视图的更多信息,请参阅视图。
要在视图上创建MongoDB搜索索引,请参阅将视图与MongoDB搜索结合使用。