Overview
在本指南中,您可以学习;了解如何使用 Laravel MongoDB运行文本查询。
您可以使用文本查询来检索在指定字段中包含术语或短语的文档。术语是不包括空白字符的字符序列。短语是具有任意数量的空白字符的一系列术语。
本指南介绍了可用于搜索文本的 Eloquent 模型方法,并提供了示例。要学习;了解有关 Laravel 集成中的 Eloquent 模型的更多信息,请参阅 Eloquent 模型部分。
开始之前
要运行本指南中的代码示例,请完成快速入门教程。 本教程说明如何使用示例数据设置 MongoDB Atlas 实例,并在 Laravel Web 应用程序中创建以下文件:
Movie.php文件,其中包含一个Moviemovies模型来表示collection中的文档MovieController.php文件,其中包含用于运行数据库操作的show()函数browse_movies.blade.php文件,其中包含用于显示数据库操作结果的 HTML 代码
以下部分介绍如何编辑 Laravel 应用程序中的文件以运行查找操作代码示例并查看预期输出。
Atlas Search文本字段
在执行文本查询之前,必须在文本值字段上创建 文本索引。要学习;了解有关创建索引的更多信息,请参阅模式生成器指南的管理索引部分。
您可以在查询中使用 $text 操作符,然后使用过滤给 where() 方法的 $search 字段来执行文本查询。$text操作符对文本索引字段执行文本查询。$search字段指定要搜索的文本。
使用where()方法构建查询后,链接get()方法以检索查询结果。
此示例在 Movie Eloquent 模型上调用 where() 方法,以检索plot字段包含短语 "love story" 的文档。要执行此文本查询,集合必须在 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 ... ...
搜索分数
文本查询会分配一个数字文本分数,以指示每个结果与查询过滤中的字符串的匹配程度。您可以使用 orderBy() 方法对 textScore 元元数据字段进行排序,从而按相关性对结果进行排序。您可以使用$meta操作符访问权限此元数据:
$movies = Movie::where('$text', ['$search' => '"love story"']) ->orderBy('score', ['$meta' => 'textScore']) ->get();
更多信息
要查看演示如何使用 Laravel 集成执行查找操作的可运行代码示例,请参阅以下用法示例: