对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

运行MongoDB Vector Search 查询

在本指南中,您可以学习;了解如何使用MongoDB Vector Search功能对文档执行搜索。PHP库允许您使用聚合构建器执行MongoDB Vector Search 搜索查询。

要学习;了解有关MongoDB Vector Search 的更多信息,请参阅MongoDB Vector Search 概述。 PHP库的MongoDB Vector Search实施在内部使用$vectorSearch 聚合操作符符来执行查询。要学习;了解有关此操作符的更多信息,请参阅Atlas文档中的 $vectorSearch 参考资料。

注意

MongoDB Search

要对文档执行高级全文搜索,可以使用MongoDB Search API。要了解此功能,请参阅运行 MongoDB 搜索查询指南。

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

将以下类导入到您的应用程序中,以使用聚合构建者执行MongoDB向量搜索搜索查询:

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

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

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

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

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

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

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

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

Parameter
类型
说明

index

string

向量搜索索引的名称

path

array or string

存储向量嵌入的字段

queryVector

array

查询的向量表示

limit

int

要返回的结果数

在本节中,您可以学习如何使用聚合构建者执行MongoDB Vector Search搜索查询。本部分中的示例使用 sample_mflix.embedded_movies集合中的示例数据。

以下代码对 plot_embedding 向量字段执行MongoDB 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字段和 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;
}

您可以使用 vectorSearch() 方法执行多种类型的 MongoDB Vector Search 搜索查询。根据所需的查询,您可以将以下可选参数传递给 vectorSearch():

可选参数
类型
说明
默认值

exact

bool

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

false

filter

QueryInterface or array

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

不过滤

numCandidates

int or null

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

null

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