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