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