Laravel Scout 是一个基于驱动程序的简单全文搜索解决方案,通过使用模型观察者,Scout
将自动同步 Eloquent
记录的搜索索引。而 Elasticsearch
是一个分布式、RESTful 风格的搜索和数据分析引擎,通过 elastic-scout-driver
来实现Scout
的搜索扩展。
第一步:安装 Elasticsearch
可以自主安装,也可以直接购买云服务;如果通过购买云服务,记得配置好访问白名单。
ES 一般有是否可以自动创建索引的配置,可以按需设置。
有许多 ES 的安装教程,这里略过。
第二步:安装 Composer 扩展包
1 2 3 4 5 6 7 8 9
| composer require laravel/scout
composer require babenkoivan/elastic-client
composer require babenkoivan/elastic-migrations
composer require babenkoivan/elastic-scout-driver composer require babenkoivan/elastic-scout-driver-plus
|
第三步:生成配置文件
1 2 3 4 5 6
| php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
php artisan vendor:publish --provider="Elastic\Client\ServiceProvider"
php artisan vendor:publish --provider="Elastic\Migrations\ServiceProvider"
|
第四步:修改配置
在config/elastic.client.php
修改客户端连接配置,增加授权配置,若是无授权访问则可以跳过。
1 2 3 4 5 6 7 8 9 10 11
| 'connections' => [ 'default' => [ 'hosts' => [ env('ELASTIC_HOST', 'localhost:9200'), ], 'basicAuthentication' => [ env('ELASTIC_USERNAME'), env('ELASTIC_PASSWORD'), ], ], ],
|
接着在.env
中添加以下配置项
1 2 3 4 5 6 7 8 9
| SCOUT_DRIVER=elastic
SCOUT_PREFIX=test_
ELASTIC_HOST=localhost:9200 ELASTIC_USERNAME=elastic ELASTIC_PASSWORD=elastic
|
第五步:编写并执行索引迁移文件
1
| php artisan elastic:make:migration create_post_index
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
public function up(): void { Index::create('post', function (Mapping $mapping, Settings $settings) { $mapping->long('userId'); $mapping->text('name'); }); }
public function down(): void { Index::dropIfExists('post'); }
|
1 2 3 4
| php artisan migrate
php artisan elastic:migrate
|
第六步:模型调整
1 2 3 4 5 6 7 8 9 10
| use Searchable;
public function getScoutKey(): mixed # 获取索引键 public function getScoutKeyName(): mixed # 自定义索引名称 public function searchableAs(): string # 自定义搜索数据 public function toSearchableArray(): array
|
第七步:数据查询
1 2 3 4 5 6 7 8 9
| Post::search($condition)
->where('userId', 1) ->whereIn('userId', [1, 2])
->withTrashed()
->onlyTrashed()
|
其他:辅助方法
1 2 3 4
| php artisan scout:import "App\Models\Post"
php artisan scout:flush "App\Models\Post"
|
其他:ES相关配置
- ES 的索引配置
index.max_result_window
默认10000,代表窗口大小
- 查询时添加
track_total_hits: true
,可返回准确的条数,非大概的值
具体每一步的详细教程及方法,关注后续文章。
参考文档