friendsofcat/opensearch-scout-driver

OpenSearch 驱动程序,适用于 Laravel Scout

2.1.0 2023-05-19 17:09 UTC

This package is auto-updated.

Last update: 2024-09-19 20:10:12 UTC


README

OpenSearch 驱动程序,适用于 Laravel Scout。

内容

兼容性

OpenSearch Scout Driver 当前版本已与以下配置进行测试:

  • PHP 7.4-8.2
  • OpenSearch 2.x
  • Laravel 7.x-10.x
  • Laravel Scout 7.x-10.x

安装

该库可以通过 Composer 安装

composer require friendsofcat/opensearch-scout-driver

注意,此库只是 Laravel Scout 的驱动程序,请不要忘记在安装之前安装它

composer require laravel/scout

安装 Scout 后,使用以下命令发布其配置文件

php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

然后,将 config/scout.php 文件中的 driver 选项更改为 opensearch

// config/scout.php

'driver' => env('SCOUT_DRIVER', 'opensearch'),

如果您想使用 OpenSearch Scout Driver 与 Lumen 框架,请参阅此指南

配置

OpenSearch Scout Driver 使用 friendsofcat/opensearch-client 作为依赖项。要更改客户端设置,您需要首先发布配置文件

php artisan vendor:publish --provider="OpenSearch\Laravel\Client\ServiceProvider"

在新建的 config/opensearch.client.php 文件中,您可以使用配置散列定义默认连接名称。请参阅 opensearch-client 文档 获取更多详细信息。

OpenSearch Scout Driver 目前只有一个配置选项 - refresh_documents。如果将其设置为 true(默认为 false),则文档将立即索引,这在测试中可能很有用。

您可以在发布后通过以下命令在 config/opensearch.scout_driver.php 文件中配置 refresh_documents

php artisan vendor:publish --provider="OpenSearch\ScoutDriver\ServiceProvider"

最后,请注意,使用 Scout 可以配置可搜索的数据、模型 ID 和索引名称。请参阅 官方 Scout 文档 获取更多详细信息。

请注意,_id 字段不能是可搜索数据的部分,因此请确保在数据库使用 MongoDB 的情况下,该字段在 toSearchableArray 方法中被排除或重命名。

基本用法

OpenSearch 驱动程序在内部使用 OpenSearch 查询字符串,包裹在 bool 查询 下。这意味着您可以在搜索模型时使用 迷你语言语法

$orders = App\Order::search('title:(Star OR Trek)')->get();

当省略查询字符串时,使用 match all 查询

$orders = App\Order::search()->where('user_id', 1)->get();

请参阅 官方 Laravel Scout 文档 获取更多详细信息和使用示例。

高级搜索

如果基本搜索无法满足您的项目需求,请检查OpenSearch Scout Driver Plus,它通过引入高级查询构建器扩展了标准Scout搜索功能。这些构建器允许您使用复合查询、自定义筛选和排序、高亮显示等功能。

迁移

如果您正在寻找一种程序化控制OpenSearch索引模式的方法,请检查OpenSearch Migrations。OpenSearch Migrations允许您修改应用程序的索引模式,并以与Laravel数据库迁移相同的轻松方式在多个环境中共享。

陷阱

有一些与其他Scout驱动程序略有不同之处

  • 正如您可能知道的,Scout只索引由toSearchableArray方法返回的字段。OpenSearch驱动程序即使在toSearchableArray返回空数组时也会索引模型。您可以通过覆盖模型中的shouldBeSearchable方法来更改此行为
public function shouldBeSearchable()
{
    return count($this->toSearchableArray()) > 0;
}
$searchResult = App\Order::search('Star Trek')->raw();
  • 为了与其他驱动程序兼容并避免暴露引擎的内部实现,OpenSearch驱动程序忽略了search方法的回调参数
App\Order::search('Star Trek', function () {
    // this will not be triggered
})->get()