Docs 菜单
Docs 主页
/ /

运行MongoDB搜索查询

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

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

注意

MongoDB Vector Search

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

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

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

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

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

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

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

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

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

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

在本节中,您可以学习;了解如何使用聚合构建器执行不同类型的MongoDB搜索查询。本部分中的示例使用 sample_restaurants.restaurants集合中的示例数据。

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

此示例执行具有以下规范的MongoDB 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() 方法,用于对集合中的文档运行自动完成搜索。

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

注意

必须为自动完成查询配置MongoDB搜索索引。要学习;了解更多信息,请参阅Atlas文档中的如何对字段进行索引以支持自动完成。

以下代码对 name字段上的字符串 "Lucy" 执行MongoDB搜索自动完成查询:

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

可选参数
类型
说明

index

string

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

highlight

array

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

concurrent

bool

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

count

string

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

searchAfter

string

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

searchBefore

string

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

scoreDetails

bool

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

sort

array

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

returnStoredSource

bool

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

tracking

array

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

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

后退

运行数据库命令

在此页面上