aman-rawat/elastic-scout-driver

Laravel Scout 的 Elasticsearch 驱动

dev-master 2022-08-01 12:48 UTC

This package is auto-updated.

Last update: 2024-09-29 06:14:51 UTC


README

Support the project!

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 = App\Order::search('Star Trek')->raw();
  • 为了与其他驱动程序兼容并避免暴露引擎的内部实现,Elastic 驱动程序忽略 search 方法的回调参数
App\Order::search('Star Trek', function () {
    // this will not be triggered
})->get()