Docs 菜单

搜索文本

在本指南中,您可以学习;了解如何使用 Laravel MongoDB运行文本搜索

您可以使用文本搜索来检索在指定字段中包含词语或短语的文档。词语是不包含空格字符的一系列字符。短语是包含任意数量的空白字符的一系列词语。

本指南介绍了可用于搜索文本的 Eloquent 模型方法,并提供了示例。要学习;了解有关 Laravel 集成中的 Eloquent 模型的更多信息,请参阅 Eloquent 模型部分。

要运行本指南中的代码示例,请完成快速入门教程。 本教程说明如何使用示例数据设置 MongoDB Atlas 实例,并在 Laravel Web 应用程序中创建以下文件:

  • Movie.php 文件,其中包含一个Movie movies模型来表示collection中的文档

  • MovieController.php 文件,其中包含用于运行数据库操作的show()函数

  • browse_movies.blade.php 文件,其中包含用于显示数据库操作结果的 HTML 代码

以下部分介绍如何编辑 Laravel 应用程序中的文件以运行查找操作代码示例并查看预期输出。

在执行文本搜索之前,必须在文本值字段上创建 文本索引。要学习;了解有关创建索引的更多信息,请参阅模式生成器指南的管理索引部分。

您可以执行文本Atlas Search ,方法是使用$text操作符,然后使用查询筛选器中传递给 where() 方法的 $search 字段。 $text 操作符对文本索引字段执行文本Atlas Search 。 $search 字段指定要Atlas Search的文本。

使用where()方法构建查询后,链接get()方法以检索查询结果。

此示例在Movie Eloquent 模型上调用where()方法,以检索plot字段包含短语"love story"的文档。 要执行此文本Atlas Search ,集合必须在 plot 字段上具有文本索引。

使用以下语法指定查询:

$movies = Movie::where('$text', ['$search' => '"love story"'])
->get();

要在browse_movies视图中查看查询结果,请编辑MovieController.php文件中的show()函数,使其类似于以下代码:

class MovieController
{
public function show()
{
$movies = Movie::where('$text', ['$search' => '"love story"'])
->get();
return view('browse_movies', [
'movies' => $movies
]);
}
}
Title: Cafè de Flore
Year: 2011
Runtime: 120
IMDB Rating: 7.4
IMDB Votes: 9663
Plot: A love story between a man and woman ...
Title: Paheli
Year: 2005
Runtime: 140
IMDB Rating: 6.7
IMDB Votes: 8909
Plot: A folk tale - supernatural love story about a ghost ...
Title: Por un puèado de besos
Year: 2014
Runtime: 98
IMDB Rating: 6.1
IMDB Votes: 223
Plot: A girl. A boy. A love story ...
...

文本Atlas Search会分配一个数字文本分数,以指示每个结果与查询筛选器中的string的匹配程度。 您可以使用orderBy()方法对textScore元数据字段进行排序,从而按相关性对结果进行排序。 您可以使用$meta操作符访问此元数据:

$movies = Movie::where('$text', ['$search' => '"love story"'])
->orderBy('score', ['$meta' => 'textScore'])
->get();

提示

要学习;了解有关orderBy() 方法的更多信息,请参阅“修改查询输出”指南的“对查询结果进行排序”部分。

要查看演示如何使用 Laravel 集成执行查找操作的可运行代码示例,请参阅以下用法示例:

要学习;了解如何根据过滤条件检索数据,请参阅检索数据指南。