Docs 菜单
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 Vector Search 查询:

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":"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() 方法执行多种类型的MongoDB Vector Search 查询。根据所需的查询,您可以将以下可选参数传递给 vectorSearch()

可选参数
类型
说明
默认值

exact

bool

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

false

filter

QueryInterface or array

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

不过滤

numCandidates

int or null

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

null

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

后退

MongoDB Search

在此页面上