Atlas Search
Overview
在本指南中,您可以了解如何使用 Atlas Search 功能来搜索文档。Laravel MongoDB 提供了一个API,可以直接使用模型执行 Atlas Search 查询。本指南描述了如何创建 Atlas Search 索引,并提供了使用 Laravel Integration 执行搜索的示例。
注意
部署兼容性
仅当连接到MongoDB Atlas集群时才能使用Atlas Search功能。此功能不适用于自我管理部署。
要了解有关 Atlas Search 的更多信息,请参阅 Atlas 文档中的 概述。Atlas Search API 在内部使用 $search
聚合操作符来执行查询。要了解有关该操作符的更多信息,请参阅 Atlas 文档中的 $search 参考资料。
注意
您可能无法将本指南所述的方法用于所有类型的 Atlas Search 查询。对于更复杂的使用案例,请使用 聚合构建器 来创建聚合管道。
要对 MongoDB 中的向量嵌入进行搜索,您可以使用 Laravel MongoDB Atlas Vector Search API。要了解有关此功能的更多信息,请参阅 Atlas Vector Search 指南。
创建 Atlas Search 索引
您可以通过以下两种方式创建Atlas Search索引:
在
Schema
门面上调用create()
方法,并向searchIndex()
辅助方法传递包含索引创建详细信息。要学习;了解有关此策略的更多信息,请参阅模式构建器指南的管理Atlas Search和 Vector Search 索引部分。访问集合,然后从 MongoDB PHP 库中调用
createSearchIndex()
方法,如下代码所示:$collection = DB::connection('mongodb')->getCollection('movies'); $collection->createSearchIndex( ['mappings' => ['dynamic' => true]], ['name' => 'search_index'] );
执行查询
在本节中,您可以学习如何在 Laravel 集成中使用 Atlas Search API。
一般查询
Laravel Integration 提供了 search()
方法,既可用作查询构建器方法,也可用作 Eloquent 模型方法。您可以使用 search()
方法在集合中的文档上运行 Atlas Search 查询。
您必须将 operator
参数传递给 search()
方法,该参数是 SearchOperatorInterface
的实例或包含操作符类型、字段名称和查询值的数组。您可以通过调用 Search::text()
方法并传递您要查询的字段以及您的搜索词或短语来创建 SearchOperatorInterface
的实例。
您必须在应用程序中包含以下导入语句才能创建 SearchOperatorInterface
实例:
use MongoDB\Builder\Search;
以下代码在 Movie
模型的 title
字段上执行 Atlas Search 查询,以搜索术语 'dream'
:
$movies = Movie::search( sort: ['title' => 1], operator: Search::text('title', 'dream'), )->all();
[ { "title": "Dreaming of Jakarta", "year": 1990 }, { "title": "See You in My Dreams", "year": 1996 } ]
您可以使用 search()
方法来执行多种类型的 Atlas Search 查询。根据查询需求,您可以将以下可选参数传递给 search()
:
可选参数 | 类型 | 说明 |
---|---|---|
|
| 提供要使用的 Atlas Search 索引名称 |
|
| 指定在原始上下文中显示搜索词的高亮选项 |
|
| 在专用搜索节点上并行化搜索查询各分段 |
|
| 指定用于检索结果计数的计数选项 |
|
| 指定一个参考点,用于返回紧接该点之后开始的文档 |
|
| 指定一个参考点,用于返回紧接该点之前开始的文档 |
|
| 指定是否检索结果得分的明细 |
|
| 指定用于对结果进行排序的字段 |
|
| 指定是对后端数据库执行完整文档查找,还是直接从 Atlas Search 仅返回存储的源字段 |
|
| 指定用于检索搜索词相关分析信息的跟踪选项 |
自动完成查询
Laravel Integration 提供了 autocomplete()
方法,既可用作查询构建器方法,也可用作 Eloquent 模型方法。您可以使用 autocomplete()
方法运行集合中文档的自动完成搜索。此方法仅返回您指定为查询路径的字段的值。
要了解有关此类 Atlas Search 查询的更多信息,请参阅 Atlas 文档中的自动完成参考。
注意
您必须先在集合上创建一个具有自动完成配置的 Atlas Search 索引,然后才能执行自动完成搜索。要了解有关创建搜索索引的更多信息,请参阅本指南的创建 Atlas Search 索引部分。
以下代码在 title
字段上对字符串 "jak"
执行 Atlas Search 自动完成查询:
$movies = Movie::autocomplete('title', 'jak')->all();
[ "Dreaming of Jakarta", "Jakob the Liar", "Emily Calling Jake" ]
您还可以将以下可选参数传递给 autocomplete()
方法来定制查询:
可选参数 | 类型 | 说明 | 默认值 |
---|---|---|---|
|
| 启用模糊搜索和模糊搜索选项 |
|
|
| 指定搜索词元的顺序 |
|
要了解更多关于这些参数的信息,请参阅 Atlas 文档中 autocomplete
操作符参考的选项部分。