Overview
在本指南中,您可以学习;了解如何使用MongoDB Vector Search功能对文档执行搜索。 PHP库允许您使用 聚合构建器执行MongoDB Vector Search 查询。
要学习;了解有关MongoDB Vector Search 的更多信息,请参阅 MongoDB Vector Search 概述。 PHP库的MongoDB Vector Search实施在内部使用$vectorSearch 聚合操作符符来执行查询。要学习;了解有关此操作符的更多信息,请参阅Atlas文档中的 $vectorSearch 参考资料。
MongoDB Vector Search 索引
在执行MongoDB Vector Search 查询之前,您必须在集合上创建MongoDB Vector Search索引。要学习;了解有关创建此索引类型的更多信息,请参阅MongoDB搜索索引指南。
向量搜索聚合阶段
将以下类导入到您的应用程序中,以使用聚合构建器执行MongoDB Vector Search 查询:
use MongoDB\Builder\Stage; 
要在聚合管道中创建 $vectorSearch 阶段,请执行以下操作:
- 创建一个大量来存储管道阶段。 
- 调用 - Stage::vectorSearch()方法以创建MongoDB Vector Search 阶段。
- 在 - vectorSearch()方法体内,指定向量查询的条件。
以下代码演示了用于构建基本MongoDB Vector Search 查询的模板:
$pipeline = [     Stage::vectorSearch(         /* MongoDB Vector Search query specifications         index: '<index name>',         path: '<path to embeddings>', ...*/     ), ]; 
您必须将以下参数传递给vectorSearch()方法:
| Parameter | 类型 | 说明 | 
|---|---|---|
| 
 | 
 | 向量搜索索引的名称 | 
| 
 | 
 | 存储向量嵌入的字段 | 
| 
 | 
 | 查询的向量表示 | 
| 
 | 
 | 要返回的结果数 | 
Vector Search 查询示例
在本节中,您可以学习;了解如何使用聚合构建器执行MongoDB Vector Search 查询。本部分中的示例使用 sample_mflix.embedded_movies集合中的示例数据。
注意
查询向量长度
出于演示目的,本节中的示例使用的示例查询向量与您可能在可运行的应用程序中使用的查询向量相比,包含的元素非常少。要查看包含全长查询向量的示例,请参阅MongoDB Vector Search 快速入门,然后从页面右上角的 下拉列表中选择PHP Select your language。
基本向量搜索查询
以下代码对 plot_embedding 向量字段执行MongoDB Vector Search查询:
$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 = [     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() 方法执行多种类型的MongoDB Vector Search 查询。根据所需的查询,您可以将以下可选参数传递给 vectorSearch():
| 可选参数 | 类型 | 说明 | 默认值 | 
|---|---|---|---|
| 
 | 
 | 指定是运行精确最近邻 ( | 
 | 
| 
 | 
 | 为要搜索的文档指定预筛选器 | 不过滤 | 
| 
 | 
 | 指定搜索过程中要使用的最近邻数量 | 
 |