Docs 菜单
Docs 主页
/ / /
PHP 库手册
/

Atlas Vector Search

在本指南中,您可以学习;了解如何使用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 Search

要对文档执行高级全文搜索,可以使用Atlas Search API。要学习;了解此功能,请参阅Atlas Search指南。

在执行Atlas Vector Search查询之前,您必须在集合上创建Atlas Vector Search索引。要学习;了解有关创建此索引类型的更多信息,请参阅Atlas Search索引指南。

将以下类导入到应用程序中,以使用聚合构建器执行Atlas Search查询:

use MongoDB\Builder\Pipeline;
use MongoDB\Builder\Stage;

要在聚合管道中创建 $vectorSearch 阶段,请执行以下操作:

  1. 创建一个 Pipeline实例来存储管道阶段。

  2. 调用 Stage::vectorSearch() 方法以创建Atlas Vector Search阶段。

  3. vectorSearch() 方法体内,指定向量查询的条件。

以下代码演示了用于构建基本Atlas Search查询的模板:

$pipeline = new Pipeline(
Stage::vectorSearch(
/* Atlas Vector Search query specifications
index: '<index name>',
path: '<path to embeddings>', ...*/
),
);

您必须将以下参数传递给vectorSearch()方法:

Parameter
类型
说明

index

string

向量搜索索引的名称

path

array or string

存储向量嵌入的字段

queryVector

array

查询的向量表示

limit

int

要返回的结果数

在本节中,您可以学习;了解如何使用聚合构建器执行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()

可选参数
类型
说明
默认值

exact

bool

指定是运行精确最近邻 (true) 还是近似最近邻 (false)搜索

false

filter

QueryInterface or array

为要搜索的文档指定预筛选器

不过滤

numCandidates

int or null

指定搜索过程中要使用的最近邻数量

null

$vectorSearch要学习;了解有关这些参数的更多信息,请参阅Atlas文档中 操作符参考的字段部分。

后退

Atlas Search

在此页面上

  • Overview
  • Atlas Vector Search 索引
  • 向量搜索聚合阶段
  • Atlas Search查询示例
  • 基本向量搜索查询
  • 向量搜索分数
  • 向量搜索选项