Atlas Vector Search
Overview
在本指南中,您可以学习;了解如何使用Atlas Vector Search功能对文档执行搜索。PHP库允许您使用 聚合构建器 执行Atlas Vector Search查询。
注意
部署兼容性
仅当连接到MongoDB Atlas集群时才能使用Atlas Vector Search功能。此功能不适用于自我管理部署。
要学习;了解有关Atlas Vector Search 的更多信息,请参阅 Atlas Vector Search概述。PHP库的Atlas Vector Search实施在内部使用 $vectorSearch
聚合操作符符来执行查询。要学习;了解有关此操作符的更多信息,请参阅Atlas文档中的 $vectorSearch 参考资料。
Atlas Vector Search 索引
在执行Atlas Vector Search查询之前,您必须在集合上创建Atlas Vector Search索引。要学习;了解有关创建此索引类型的更多信息,请参阅Atlas Search索引指南。
向量搜索聚合阶段
将以下类导入到应用程序中,以使用聚合构建器执行Atlas Search查询:
use MongoDB\Builder\Pipeline; use MongoDB\Builder\Stage;
要在聚合管道中创建 $vectorSearch
阶段,请执行以下操作:
创建一个
Pipeline
实例来存储管道阶段。调用
Stage::vectorSearch()
方法以创建Atlas Vector Search阶段。在
vectorSearch()
方法体内,指定向量查询的条件。
以下代码演示了用于构建基本Atlas Search查询的模板:
$pipeline = new Pipeline( Stage::vectorSearch( /* Atlas Vector Search query specifications index: '<index name>', path: '<path to embeddings>', ...*/ ), );
您必须将以下参数传递给vectorSearch()
方法:
Parameter | 类型 | 说明 |
---|---|---|
|
| 向量搜索索引的名称 |
|
| 存储向量嵌入的字段 |
|
| 查询的向量表示 |
|
| 要返回的结果数 |
Atlas Search查询示例
在本节中,您可以学习;了解如何使用聚合构建器执行Atlas Vector Search查询。本部分中的示例使用 sample_mflix.embedded_movies
集合中的示例数据。
注意
查询向量长度
出于演示目的,本节中的示例使用的示例查询向量与您可能在可运行的应用程序中使用的查询向量相比,包含的元素非常少。要查看包含完整查询向量的示例,请参阅Atlas Vector Search快速入门,然后从页面右上角的 Select your language 下拉列表中选择 PHP。
基本向量搜索查询
以下代码对 plot_embedding
向量字段执行Atlas Vector Search查询:
$pipeline = new Pipeline( Stage::vectorSearch( index: 'vector', path: 'plot_embedding', queryVector: [-0.0016261312, -0.028070757, -0.011342932], numCandidates: 150, limit: 5, ), Stage::project( _id: 0, title: 1, ), ); $cursor = $collection->aggregate($pipeline); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"title":"Thrill Seekers"} {"title":"About Time"} {"title":"Timecop"} // Results truncated
向量搜索分数
以下代码执行与前面示例相同的查询,但仅输出 title
字段和 vectorSearchScore
元字段,后者描述文档与查询向量的匹配程度:
$pipeline = new Pipeline( Stage::vectorSearch( index: 'vector', path: 'plot_embedding', queryVector: [-0.0016261312, -0.028070757, -0.011342932], numCandidates: 150, limit: 5, ), Stage::project( _id: 0, title: 1, score: ['$meta' => 'vectorSearchScore'], ), ); $cursor = $collection->aggregate($pipeline); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"title":"Thrill Seekers","score":0.927734375} {"title":"About Time","score":0.925750732421875} {"title":"Timecop","score":0.9241180419921875} // Results truncated
向量搜索选项
您可以使用 vectorSearch()
方法执行多种类型的Atlas Vector Search查询。根据所需的查询,您可以将以下可选参数传递给 vectorSearch()
:
可选参数 | 类型 | 说明 | 默认值 |
---|---|---|---|
|
| 指定是运行精确最近邻 ( |
|
|
| 为要搜索的文档指定预筛选器 | 不过滤 |
|
| 指定搜索过程中要使用的最近邻数量 |
|