Docs 菜单

Atlas Search

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

注意

部署兼容性

仅当连接到MongoDB Atlas集群时才能使用Atlas Search功能。此功能不适用于自我管理部署。

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

注意

Atlas Vector Search

要在MongoDB中对向量嵌入执行搜索,可以使用Atlas Vector Search API。要学习;了解此功能,请参阅Atlas Vector Search指南。

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

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

use MongoDB\Builder\Search;
use MongoDB\Builder\Stage;

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

  1. 创建一个大量来存储管道阶段。

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

  3. search() 方法的主体中,使用 Search 构建器类中的方法来构建搜索查询条件。

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

$pipeline = [
Stage::search(
/* Atlas Search query specifications
Search::compound(...) */
),
];

在本节中,您可以了解如何使用聚合构建器来执行不同类型的 Atlas Search 查询。本节中的示例使用来自 sample_restaurants.restaurants 集合的样本数据。

使用 Search::compound() 方法将两个或更多操作符组合到单次查询中。此方法为您的子句接受命名参数,例如 mustfilter。在每个子句中,使用 Search::text() 方法来指定在执行全文搜索时要查找的字符串。

此示例执行具有以下规范的 Atlas Search 查询:

  • 包括 must 子句,用于在 name字段中搜索字符串 "kitchen"

  • 包含 should 子句,以对 cuisine 字段中包含 "american" 的文档进行高优先级排序

  • 包含 filter字段,以仅包含结果中 borough 值为 "Queens" 的文档

$pipeline = [
Stage::search(
Search::compound(
must: [
Search::text(
query: 'kitchen',
path: 'name',
),
],
should: [
Search::text(
query: 'american',
path: 'cuisine',
),
],
filter: [
Search::text(
query: 'Queens',
path: 'borough',
),
],
),
),
Stage::project(
borough: 1,
cuisine: 1,
name: 1
),
Stage::limit(3)
];
$cursor = $collection->aggregate($pipeline);
foreach ($cursor as $doc) {
echo json_encode($doc), PHP_EOL;
}
{"_id":...,"borough":"Queens","cuisine":"American","name":"Kitchen Door"}
{"_id":...,"borough":"Queens","cuisine":"American","name":"Cc Kitchen"}
{"_id":...,"borough":"Queens","cuisine":"American","name":"Suite Kitchen"}
// Results truncated

PHP 库提供了 Search::autocomplete() 方法,用于对集合中的文档运行自动完成搜索。

要了解有关此类 Atlas Search 查询的更多信息,请参阅 Atlas 文档中的自动完成参考。

注意

Atlas Search 索引必须配置为支持自动完成查询。要了解更多信息,请参阅 Atlas 文档中的如何为自动完成的字段编制索引

以下代码在 name 字段上对字符串 "Lucy" 执行 Atlas Search 自动完成查询:

$pipeline = [
Stage::search(
Search::autocomplete(
query: 'Lucy',
path: 'name',
),
),
Stage::limit(3),
Stage::project(_id: 0, name: 1),
];
$cursor = $collection->aggregate($pipeline);
foreach ($cursor as $doc) {
echo json_encode($doc), PHP_EOL;
}
{"name":"Juicy Lucy"}
{"name":"Lucy'S Vietnamese Kitchen"}
{"name":"Lucy'S Cantina Royale"}
// Results Truncated

您还可以将以下可选参数传递给 autocomplete() 方法来定制查询:

可选参数
说明
默认值

fuzzy

启用模糊搜索和模糊搜索选项

false

tokenOrder

指定搜索词元的顺序

'any'

要了解更多关于这些参数的信息,请参阅 Atlas 文档中 autocomplete 操作符参考的选项部分。

您可以使用 search() 方法来执行多种类型的 Atlas Search 查询。根据查询需求,您可以将以下可选参数传递给 search()

可选参数
类型
说明

index

string

提供要使用的 Atlas Search 索引名称

highlight

array

指定在原始上下文中显示搜索词的高亮选项

concurrent

bool

在专用搜索节点上并行化搜索查询各分段

count

string

指定用于检索结果计数的计数选项

searchAfter

string

指定一个参考点,用于返回紧接该点之后开始的文档

searchBefore

string

指定一个参考点,用于返回紧接该点之前开始的文档

scoreDetails

bool

指定是否检索结果得分的明细

sort

array

指定用于对结果进行排序的字段

returnStoredSource

bool

指定是对后端数据库执行完整文档查找,还是直接从 Atlas Search 仅返回存储的源字段

tracking

array

指定用于检索搜索词相关分析信息的跟踪选项

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