aman-rawat / elastic-scout-driver
Laravel Scout 的 Elasticsearch 驱动
Requires
- php: ^7.3 || ^8.0
- aman-rawat/elastic-adapter: ^1.0
- babenkoivan/elastic-client: ^1.2
Requires (Dev)
- babenkoivan/elastic-migrations: ^2.0
- friendsofphp/php-cs-fixer: ^3.0
- laravel/legacy-factories: ^1.1
- laravel/scout: ^9.0
- orchestra/testbench: ^6.12
- phpstan/phpstan: ^0.12.32
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-29 06:14:51 UTC
README
Laravel Scout 的 Elasticsearch 驱动。
内容
兼容性
当前版本的 Elastic Scout Driver 已经与以下配置进行了测试
- PHP 7.3-8.0
- Elasticsearch 7.x
- Laravel 6.x-8.x
- Laravel Scout 7.x-9.x
安装
可以通过 Composer 安装此库
composer require babenkoivan/elastic-scout-driver
注意,这个库只是 Laravel Scout 的驱动,请不要忘记先安装它
composer require laravel/scout
安装 Scout 后,使用以下命令发布其配置文件
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
然后,将 config/scout.php
文件中的 driver
选项更改为 elastic
// config/scout.php 'driver' => env('SCOUT_DRIVER', 'elastic'),
如果您想使用 Elastic Scout Driver 与 Lumen 框架,请查看 本指南。
配置
Elastic Scout Driver 使用 babenkoivan/elastic-client 作为依赖项。如果您想更改默认客户端设置(我相当确定您会这样做),则需要首先创建配置文件
php artisan vendor:publish --provider="ElasticClient\ServiceProvider"
您可以在 config/elastic.client.php
文件中更改 Elasticsearch 主机和其它客户端设置。有关更多详细信息,请参阅 babenkoivan/elastic-client。
目前,Elastic Scout Driver 只有一个配置选项 - refresh_documents
。如果设置为 true
(默认为 false
),则文档将立即索引,这在测试时可能很有用。
您可以在发布后通过以下命令在 config/elastic.scout_driver.php
文件中配置 refresh_documents
php artisan vendor:publish --provider="ElasticScoutDriver\ServiceProvider"
最后,请记住,使用 Scout,您可以配置可搜索的数据、模型 ID 和索引名称。有关更多详细信息,请查看 官方 Scout 文档。
注意,
_id
字段不能是可搜索数据的一部分,因此请确保在数据库使用 MongoDB 时,在toSearchableArray
方法中排除或重命名该字段。
基本使用
Elastic 驱动在底层使用 Elasticsearch 的 查询字符串,包裹在 bool 查询 中。这意味着您可以在搜索模型时使用 迷你语言语法。
$orders = App\Order::search('title:(Star OR Trek)')->get();
如果省略了查询字符串,则使用 match all 查询。
$orders = App\Order::search()->where('user_id', 1)->get();
有关更多详细信息和使用示例,请参阅 官方 Laravel Scout 文档。
高级搜索
如果基本搜索无法满足您的项目需求,请查看 Elastic Scout Driver Plus,它通过引入高级查询构建器扩展了标准的 Scout 搜索功能。这些构建器允许您使用复合查询、自定义过滤器、排序、高亮显示等功能。
迁移
如果您正在寻找一种通过程序控制 Elasticsearch 索引模式的方法,请检查Elastic Migrations。Elastic Migrations 允许您修改应用程序的索引模式,并且可以像 Laravel 数据库迁移一样轻松地在多个环境中共享。
陷阱
有一些事情与其他 Scout 驱动程序略有不同
- 正如您可能所知,Scout 只索引由
toSearchableArray
方法返回的字段。Elastic 驱动程序即使在toSearchableArray
返回空数组的情况下也会索引模型。您可以通过覆盖模型中的shouldBeSearchable
方法来改变这种行为
public function shouldBeSearchable() { return count($this->toSearchableArray()) > 0; }
- 原始搜索返回
SearchResponse
类的实例(见 Elastic Adapter)
$searchResponse = App\Order::search('Star Trek')->raw();
- 为了与其他驱动程序兼容并避免暴露引擎的内部实现,Elastic 驱动程序忽略
search
方法的回调参数
App\Order::search('Star Trek', function () { // this will not be triggered })->get()