Overview
在本指南中,您可以学习;了解如何使用MongoDB搜索功能对文档执行搜索。 PHP库允许您使用 聚合构建器执行MongoDB搜索查询。
要学习;了解有关MongoDB Search 的更多信息,请参阅 MongoDB Search 概述。 PHP库的MongoDB Search实施在内部使用$search 聚合操作符符来执行查询。要学习;了解有关此操作符的更多信息,请参阅Atlas文档中的 $搜索参考。
注意
MongoDB Vector Search
要在MongoDB中对向量嵌入执行搜索,可以使用MongoDB Vector Search API。要学习;了解此功能,请参阅运行MongoDB Vector Search 查询指南。
MongoDB搜索索引
在执行MongoDB Search 查询之前,您必须在集合上创建MongoDB Search索引。要学习;了解有关创建此索引类型的更多信息,请参阅MongoDB搜索索引指南。
搜索聚合阶段
将以下类导入到您的应用程序中,以使用聚合构建器执行MongoDB搜索查询:
use MongoDB\Builder\Search; use MongoDB\Builder\Stage;
要在聚合管道中创建 $search 阶段,请执行以下操作:
创建一个大量来存储管道阶段。
调用
Stage::search()方法以创建MongoDB Search 阶段。在
search()方法的主体中,使用Search构建器类中的方法来构建搜索查询条件。
以下代码演示了用于构建基本MongoDB搜索查询的模板:
$pipeline = [ Stage::search( /* MongoDB Search query specifications Search::compound(...) */ ), ];
MongoDB Search 查询示例
在本节中,您可以学习;了解如何使用聚合构建器执行不同类型的MongoDB搜索查询。本部分中的示例使用 sample_restaurants.restaurants集合中的示例数据。
带过滤器的复合查询
使用 Search::compound() 方法将两个或更多操作符组合到单次查询中。此方法为您的子句接受命名参数,例如 must 和 filter。在每个子句中,使用 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文档中的自动完成参考。
以下代码对 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() 方法来定制查询:
可选参数 | 说明 | 默认值 |
|---|---|---|
| 启用模糊搜索和模糊搜索选项 |
|
| 指定搜索词元的顺序 |
|
要了解更多关于这些参数的信息,请参阅 Atlas 文档中 autocomplete 操作符参考的选项部分。
搜索选项
您可以使用 search() 方法执行多种类型的MongoDB搜索查询。根据所需的查询,您可以将以下可选参数传递给 search():
可选参数 | 类型 | 说明 |
|---|---|---|
|
| 提供要使用的MongoDB Search索引的名称 |
|
| 指定在原始上下文中显示搜索词的高亮选项 |
|
| 在专用搜索节点上并行化搜索查询各分段 |
|
| 指定用于检索结果计数的计数选项 |
|
| 指定一个参考点,用于返回紧接该点之后开始的文档 |
|
| 指定一个参考点,用于返回紧接该点之前开始的文档 |
|
| 指定是否检索结果得分的明细 |
|
| 指定用于对结果进行排序的字段 |
|
| 指定是对后端数据库执行完整文档查找,还是直接从MongoDB Search 仅返回存储的源字段 |
|
| 指定用于检索搜索词相关分析信息的跟踪选项 |