在本指南中,我们将了解如何在 Laravel 10 中使用搜索功能。我们将首先介绍全文搜索的好处。然后,我们将引导您完成在 Laravel 应用程序中设置全文搜索的过程。
为什么要使用全文搜索?
在传统的 SQL 或 NoSQL 数据库中,查询会找到与给定条件完全匹配的结果。相反,全文搜索查询可以与数据库的内容匹配某些或所有文本查询。因此,从本质上讲,即使在部分匹配的情况下,全文搜索也可以提供结果。
在构建面向用户的搜索界面时,全文搜索为用户赋能。对拼写错误、前缀搜索和同义词的容忍度有助于他们更快地获得结果。当用户不知道他们在寻找什么时,它可以提高可发现性。
如何在 Laravel 10 中使用搜索功能?
安装 Laravel Scout
Laravel 通过 Laravel Scout 提供开箱即用的全文搜索功能。
要启用它,请导航到您的 Laravel 应用程序目录,并通过Composer 包管理器安装 Scout。
composer require laravel/scout
安装 Scout 后,您应该发布 Scout 配置文件。您可以通过运行以下 Artisan 命令来完成此操作
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
此命令应该在您的应用程序目录中创建一个新的配置文件:config/scout.php
。
配置 Laravel Scout 驱动程序
让我们将 Laravel Scout 配置为使用 Meilisearch 驱动程序。Meilisearch 是一个用 Rust 构建的开源搜索引擎。这将允许获得最佳的全文搜索性能。实际上,数据库驱动程序存在SQL 数据库固有的局限性。
首先,通过 Composer 安装使用 Scout 与 Meilisearch 所需的依赖项
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
然后,更新 .env
文件中的环境变量
SCOUT_DRIVER=meilisearch
# Use the host below if you're running Meilisearch via Laravel Sail
MEILISEARCH_HOST=http://meilisearch:7700
MEILISEARCH_KEY=masterKey
Laravel 的官方 Docker 开发环境Laravel Sail 开箱即用地提供 Meilisearch 服务。请注意,当通过 Sail 运行 Meilisearch 时,Meilisearch 的主机是 http://meilisearch:7700
。
对于生产用例,我们建议使用通过Meilisearch Cloud 管理的 Meilisearch。在 Meilisearch Cloud 上,您可以在项目设置中找到您的主机 URL。
使 Eloquent 模型可搜索
安装并配置好 Scout 后,只需将 Laravel\Scout\Searchable
特性添加到您的 Eloquent 模型,即可使它们可搜索。此特性将使用 Laravel 的模型观察器来使模型中的数据与 Meilisearch 同步。
以下是一个模型示例
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
class Contact extends Model
{
use Searchable;
}
您可以使用 toSearchableArray
方法来配置要在 Meilisearch 中存储的字段。这尤其可以使模型及其关系数据存储在同一个文档中。
以下示例显示了如何在 Meilisearch 中存储模型的关系数据
<?php
namespace App\Models;
use App\Models\Company;
use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Contact extends Model
{
use Searchable;
public function company(): BelongsTo
{
return $this->belongsTo(Company::class);
}
public function toSearchableArray(): array
{
// All model attributes are made searchable
$array = $this->toArray();
// Then we add some additional fields
$array['organization_id'] = $this->company->organization->id;
$array['company_name'] = $this->company->name;
$array['company_url'] = $this->company->url;
return $array;
}
}
配置可过滤和可排序属性
Meilisearch 允许您对搜索结果执行高级过滤 和排序。通过您的 Meilisearch 索引设置选择哪些属性是可过滤和可排序的。
通过 config/scout.php
文件配置您的 Meilisearch 索引设置
<?php
use App\Models\Contact;
return [
// additional configuration...
'meilisearch' => [
'host' => env('MEILISEARCH_HOST', 'https://:7700'),
'key' => env('MEILISEARCH_KEY'),
'index-settings' => [
Contact::class => [
'filterableAttributes' => ['organization_id'],
'sortableAttributes' => ['name', 'company_name']
],
],
],
以上示例更新了 Contact 模型的 Meilisearch 索引设置
- 它使
organization_id
字段可过滤 - 它使
name
和company_name
字段可排序
通过运行以下 Artisan 命令来更新您的 Meilisearch 索引设置
php artisan scout:sync-index-settings
Laravel 全文搜索示例
我们构建了一个演示应用程序,让您体验 Laravel 应用程序中的全文搜索是什么样的。此演示展示了 CRM(客户关系管理)应用程序中的应用程序范围搜索。

此演示应用程序使用了以下搜索功能
代码在 Github 上开源。🎉
👉 查看仓库:https://github.com/meilisearch/saas-demo
我们希望本指南有助于您了解全文搜索的重要性以及如何使用 Laravel 来实现它。有关更多信息,请阅读Laravel Scout 和Meilisearch 文档。
Meilisearch 是一个开源搜索引擎,具有直观的开发人员体验,可以构建面向用户的搜索。您可以自行托管 它,或通过Meilisearch Cloud 获得高级体验。
有关更多 Meilisearch 信息,您可以加入Discord 上的社区,或订阅新闻稿。您可以通过查看路线图 和参与产品讨论 来了解有关该产品的更多信息。