friendsofcat/opensearch-scout-driver-plus

OpenSearch Scout Driver 扩展

2.1.0 2023-05-19 17:55 UTC

This package is auto-updated.

Last update: 2024-09-19 21:14:31 UTC


README

OpenSearch Scout Driver 提供扩展。

内容

功能

OpenSearch Scout Driver Plus 支持

兼容性

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

  • 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-plus

注意 此库不与 OpenSearch Scout Driver 一起工作。如果尚未安装,请按照以下步骤进行安装。如果您已经使用 OpenSearch Scout Driver,建议在安装 OpenSearch Scout Driver Plus 之前更新它

composer update friendsofcat/opensearch-scout-driver

安装库后,您需要将 OpenSearch\ScoutDriverPlus\Searchable 特性添加到您的模型中。如果某些模型已经使用标准 Laravel\Scout\Searchable 特性,您应将其替换为 OpenSearch Scout Driver Plus 提供的特性。

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

使用

查询

在开始搜索模型之前,您应定义一个查询。您可以使用查询构建器或使用数组描述查询

use OpenSearch\ScoutDriverPlus\Support\Query;

// using a query builder
$query = Query::match()
    ->field('title')
    ->query('My book')
    ->fuzziness('AUTO');

// using a raw query
$query = [
    'match' => [
        'title' => [
            'query' => 'My book',
            'fuzziness' => 'AUTO'
        ]
    ]
];

OpenSearch\ScoutDriverPlus\Support\Query 工厂的每个方法都为相应类型创建一个查询构建器。下面列出可用的方法

搜索参数

查询定义后,您可以使用 searchQuery 方法开始新的搜索

$builder = Book::searchQuery($query);

然后,您可以将其他参数链接起来,使您的搜索请求更加精确

$builder = Book::searchQuery($query)
    ->size(2)
    ->sort('price', 'asc');

构建器支持各种搜索参数,并提供许多有用的辅助工具

搜索结果

您可以通过将 execute 方法链接到构建器来检索搜索结果

$searchResult = Book::searchQuery($query)->execute();

$searchResult 提供了对匹配的命中、模型、文档等的轻松访问

$hits = $searchResult->hits();
$models = $searchResult->models();
$documents = $searchResult->documents();
$highlights = $searchResult->highlights();

您可以在 此页 上了解更多关于 $searchResult 对象的信息,并学习如何分页搜索结果。

自定义路由

如果您想为您的模型使用自定义分片路由,请重写searchableRouting方法

class Book extends Model
{
    use OpenSearch\ScoutDriverPlus\Searchable;

    public function searchableRouting()
    {
        return $this->user->id;
    }
}

自定义路由会自动应用于所有索引和删除操作。

预加载关系

有时您需要使用相关数据来索引模型

class Book extends Model
{
    use OpenSearch\ScoutDriverPlus\Searchable;

    public function toSearchableArray()
    {
        return [
            'title' => $this->title,
            'price' => $this->price,
            'author' => $this->author->only(['name', 'phone_number']),
        ];
    }
}

您可以通过重写searchableWith方法来提高批量操作的效率

class Book extends Model
{
    use OpenSearch\ScoutDriverPlus\Searchable;

    public function toSearchableArray()
    {
        return [
            'title' => $this->title,
            'price' => $this->price,
            'author' => $this->author->only(['name', 'phone_number']),
        ];
    }

    public function searchableWith()
    {
        return ['author'];
    }
}

如果您正在寻找为与搜索查询匹配的模型预加载数据关系的方法,请查看构建器的load方法文档

多个连接

您可以在客户端配置文件中配置到OpenSearch的多个连接。如果您想更改模型使用的连接,需要重写searchableConnection方法

class Book extends Model
{
    use OpenSearch\ScoutDriverPlus\Searchable;

    public function searchableConnection(): ?string
    {
        return 'books';
    }
}