jackardios/elastic-scout-driver-plus

Elastic Scout Driver 扩展

v4.0.1 2024-02-07 03:11 UTC

README

Support the project!

Elastic Scout Driver 提供扩展。

内容

功能

Elastic Scout Driver Plus 支持

兼容性

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

  • PHP 7.4-8.x
  • Elasticsearch 8.x
  • Laravel 7.x-10.x
  • Laravel Scout 7.x-10.x

安装

该库可以通过 Composer 安装

composer require babenkoivan/elastic-scout-driver-plus

注意,此库在没有 Elastic Scout Driver 的情况下无法工作。如果尚未安装,请按照以下链接中的安装步骤操作:[这里](https://github.com/babenkoivan/elastic-scout-driver#installation)。如果您已经使用 Elastic Scout Driver,建议您在安装 Elastic Scout Driver Plus 之前更新它。

composer update babenkoivan/elastic-scout-driver

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

如果您想使用 Elastic Scout Driver Plus 与 Lumen 框架 一起使用,请参阅以下指南:[此指南](https://github.com/babenkoivan/elastic-scout-driver-plus/wiki/Lumen-Installation)。

使用方法

查询

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

use Elastic\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'
        ] 
    ]
];

Elastic\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();

您可以在 [这里](https://github.com/Jackardios/elastic-scout-driver-plus/blob/HEAD/docs/search-results.md) 了解更多关于 $searchResult 对象的信息,并学习如何对搜索结果进行分页。

自定义路由

如果您想为模型使用自定义的分片路由,请覆盖 searchableRouting 方法,具体请参考自定义分片路由

class Book extends Model
{
    use Elastic\ScoutDriverPlus\Searchable;
    
    public function searchableRouting()
    {
        return $this->user->id;
    }
}

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

预加载关系

有时您需要将相关数据与模型一起索引

class Book extends Model
{
    use Elastic\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 Elastic\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 方法文档

多个连接

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

class Book extends Model
{
    use Elastic\ScoutDriverPlus\Searchable;
    
    public function searchableConnection(): ?string
    {
        return 'books';
    }
}