Docs 菜单
Docs 主页
/ /

MongoDB Search

在本指南中,您可以学习如何使用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 搜索索引:

  • 调用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()

可选参数
类型
说明

index

string

提供要使用的MongoDB搜索索引的名称

highlight

array

指定在原始上下文中显示搜索词的高亮选项

concurrent

bool

在专用搜索节点上并行化搜索查询各分段

count

string

指定用于检索结果计数的计数选项

searchAfter

string

指定一个参考点,用于返回紧接该点之后开始的文档

searchBefore

string

指定一个参考点,用于返回紧接该点之前开始的文档

scoreDetails

bool

指定是否检索结果得分的明细

sort

array

指定用于对结果进行排序的字段

returnStoredSource

bool

指定是对后端数据库执行完整文档查找,还是直接从MongoDB 搜索仅返回存储的源字段

tracking

array

指定用于检索搜索词相关分析信息的跟踪选项

$search要学习;了解有关这些参数的更多信息,请参阅Atlas文档中 操作符参考的字段部分。

Laravel Integration 提供了 autocomplete() 方法,既可用作查询构建器方法,也可用作 Eloquent 模型方法。您可以使用 autocomplete() 方法运行集合中文档的自动完成搜索。此方法仅返回您指定为查询路径的字段的值。

要学习有关此类MongoDB搜索查询的更多信息,请参阅Atlas文档中的自动完成参考。

注意

必须先在集合上创建具有自动完成配置的MongoDB搜索索引,然后才能执行自动完成搜索。请参阅本指南的创建MongoDB搜索索引部分,学习;了解有关创建搜索索引的更多信息。

以下代码对 title字段上的string "jak" 执行MongoDB搜索自动完成查询:

$movies = Movie::autocomplete('title', 'jak')->all();
[
"Dreaming of Jakarta",
"Jakob the Liar",
"Emily Calling Jake"
]

您还可以将以下可选参数传递给 autocomplete() 方法来定制查询:

可选参数
类型
说明
默认值

fuzzy

bool or array

启用模糊搜索和模糊搜索选项

false

tokenOrder

string

指定搜索词元的顺序

'any'

要了解更多关于这些参数的信息,请参阅 Atlas 文档中 autocomplete 操作符参考的选项部分。

后退

聚合构建器

在此页面上