Docs 菜单

Atlas Search

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

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

可选参数
类型
说明

index

string

提供要使用的Atlas Search索引的名称

highlight

array

指定用于在原始上下文中显示搜索词的突出显示选项

concurrent

bool

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

count

string

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

searchAfter

string

指定一个参考点,以便立即从该点开始返回文档

searchBefore

string

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

scoreDetails

bool

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

sort

array

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

returnStoredSource

bool

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

tracking

array

指定跟踪选项以检索有关搜索词的分析信息

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

Laravel 集成提供 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() 方法以自定义查询:

可选参数
类型
说明
默认值

fuzzy

boolarray

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

false

tokenOrder

string

指定搜索词元的顺序

'any'

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