Atlas Search
Overview
在本指南中,您可以学习;了解如何使用Atlas Search功能对文档执行搜索。 Laravel MongoDB提供了一个API ,可直接对模型执行Atlas Search查询。本指南介绍了如何创建Atlas Search索引,并举例说明了如何使用 Laravel 集成来执行搜索。
注意
部署兼容性
仅当连接到MongoDB Atlas集群时才能使用Atlas Search功能。此功能不适用于自我管理部署。
要学习;了解有关Atlas Search 的更多信息,请参阅Atlas文档中的 概述。 Atlas Search API在内部使用$search
聚合操作符来执行查询。要学习;了解有关此操作符的更多信息,请参阅Atlas文档中的 $搜索参考。
注意
您可能无法将本指南中描述的方法用于每种Atlas Search查询类型。对于更复杂的使用案例,请使用 聚合构建器创建聚合管道。
要在MongoDB中对向量嵌入执行搜索,可以使用 Laravel MongoDB Atlas Vector Search API。要学习;了解此功能,请参阅Atlas Vector Search指南。
创建 Atlas Search 索引
您可以通过以下两种方式创建Atlas Search索引:
create()
在Schema
门面上调用 方法,并向searchIndex()
辅助方法传递包含索引创建详细信息。要学习;了解有关此策略的更多信息,请参阅模式构建器指南的管理Atlas Search和 Vector Search 索引部分。createSearchIndex()
访问集合,然后调用MongoDB PHP库中的 方法,如以下代码所示:$collection = DB::connection('mongodb')->getCollection('movies'); $collection->createSearchIndex( ['mappings' => ['dynamic' => true]], ['name' => 'search_index'] );
执行查询
在本节中,您可以学习;了解如何在 Laravel 集成中使用Atlas Search API 。
常规查询
Laravel 集成提供 search()
方法作为查询构建器方法和 Eloquent 模型方法。您可以使用 search()
方法对集合中的文档运行Atlas Search查询。
您必须向 search()
方法传递一个 operator
参数,该参数是 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 集成提供 autocomplete()
方法作为查询构建器方法和 Eloquent 模型方法。您可以使用 autocomplete()
方法对集合中的文档运行自动完成搜索。此方法仅返回指定为查询路径的字段的值。
要学习;了解有关此类Atlas Search查询的更多信息,请参阅Atlas文档中的自动完成参考。
以下代码对 title
字段上的字符串 "jak"
执行Atlas Search自动完成查询:
$movies = Movie::autocomplete('title', 'jak')->all();
[ "Dreaming of Jakarta", "Jakob the Liar", "Emily Calling Jake" ]
您还可以将以下可选参数传递给 autocomplete()
方法以自定义查询:
可选参数 | 类型 | 说明 | 默认值 |
---|---|---|---|
|
| 启用模糊搜索和模糊搜索选项 |
|
|
| 指定搜索词元的顺序 |
|