babenkoivan / elastic-scout-driver
Laravel Scout 的 Elasticsearch 驱动器
Requires
- php: ^8.2
- babenkoivan/elastic-adapter: ^4.0
Requires (Dev)
- babenkoivan/elastic-migrations: ^4.0
- friendsofphp/php-cs-fixer: ^3.14
- laravel/legacy-factories: ^1.3
- laravel/scout: ^10.0
- orchestra/testbench: ^9.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^11.0
README
Elasticsearch 驱动器为 Laravel Scout。
内容
兼容性
当前版本的 Elastic Scout Driver 已经与以下配置进行了测试
- PHP 8.2
- Elasticsearch 8.x
- Laravel 11.x
- Laravel Scout 10.x
如果您的项目使用较旧的 Laravel(或 PHP)版本,请检查该包的上一主要版本。
安装
该库可以通过 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="Elastic\Client\ServiceProvider"
在新建的 config/elastic.client.php
文件中,您可以使用配置哈希定义默认连接名称。有关更多详细信息,请参阅elastic-client 文档。
Elastic Scout Driver 目前只有一个配置选项 - refresh_documents
。如果将其设置为 true
(默认为 false
),则文档将立即索引,这对于测试可能很有用。
您可以在发布后通过以下命令在 config/elastic.scout_driver.php
文件中配置 refresh_documents
php artisan vendor:publish --provider="Elastic\ScoutDriver\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; }
- 原始搜索返回
SearchResult
类的实例(参见Elastic Adapter)
$searchResult = App\Order::search('Star Trek')->raw();
- 为了与其他驱动程序兼容并避免暴露引擎的内部实现,Elastic驱动程序忽略了
search
方法的回调参数。
App\Order::search('Star Trek', function () { // this will not be triggered })->get()