Laravel Scout 指南
在本指南中,您将了解如何在 Laravel 10 应用程序中设置 Laravel Scout 来使用 Laravel 中的 Meilisearch。
前提条件
开始之前,确保您的计算机上安装了以下内容
- PHP
- Composer
您还需要一个 Laravel 应用程序。如果您还没有,可以运行以下命令创建一个
composer create-project laravel/laravel my-application
安装 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 驱动。首先,通过 Composer 安装使用 Meilisearch 的 Scout 所需的依赖项
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
(而不是说,http://127.0.0.1:7700
)。
注意
查看 Docker 网桥网络驱动 了解详情。
在生产中运行
对于生产用例,我们建议通过 Meilisearch Cloud 使用托管 Meilisearch。在 Meilisearch Cloud 上,您可以在项目设置中找到主机 URL。
提示
如果您希望进行自托管,请阅读我们的在生产中运行 Meilisearch指南。
让 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;
}
若要配置要存储在 Meilisearch 中的字段,请使用 toSearchableArray
方法。你可以使用此技术来将模型和其关系数据存储在同一文档中。
以下示例显示了如何在 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 索引设置配置哪些属性是 可筛选 的和 可排序 的。
在 Laravel 中,你可以通过 config/scout.php
文件配置索引设置
<?php
use App\Models\Contact;
return [
// Other Scout configuration...
'meilisearch' => [
'host' => env('MEILISEARCH_HOST', 'https://edge.meilisearch.com'),
'key' => env('MEILISEARCH_KEY'),
'index-settings' => [
Contact::class => [
'filterableAttributes' => ['organization_id'],
'sortableAttributes' => ['name', 'company_name']
],
],
],
];
上面的示例更新了 Contact
模型的 Meilisearch 索引设置
- 它使
organization_id
字段可筛选 - 它使
name
和company_name
字段可排序
更改索引设置后,将需要同步 Scout 索引设置。
同步索引设置
若要同步索引设置,请运行以下命令
php artisan scout:sync-index-settings
示例用法
你构建了一个示例应用程序来展示如何将 Meilisearch 与 Laravel Scout 一起使用。它展示了 CRM(客户关系管理)应用程序中的全应用搜索。
此演示程序使用了以下功能
当然,代码在 Github 上开源。🎉