babenkoivan/elastic-scout-driver

Laravel Scout 的 Elasticsearch 驱动器

资助包维护!
Ko-Fi
Paypal

安装量: 2,165,539

依赖: 4

建议: 0

安全: 0

星标: 250

关注者: 6

分支: 33

开放问题: 1

v4.0.0 2024-06-18 07:06 UTC

This package is auto-updated.

Last update: 2024-09-18 07:42:10 UTC


README

Support the project!

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