aman-rawat/elastic-scout-driver-plus

Elastic Scout Driver 扩展

dev-master 2022-08-01 13:05 UTC

This package is auto-updated.

Last update: 2024-09-29 06:03:22 UTC


README

Support the project!

Elastic Scout Driver 提供扩展。

内容

功能

Elastic Scout Driver Plus 支持

兼容性

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

  • PHP 7.3-8.0
  • Elasticsearch 7.x
  • Laravel 6.x-8.x
  • Laravel Scout 7.x-9.x
  • Elastic Scout Driver 2.x

安装

该库可以通过 Composer 安装

composer require babenkoivan/elastic-scout-driver-plus

注意:此库在没有 Elastic Scout Driver 的情况下无法工作。如果尚未安装,请按照此处所述的安装步骤进行。如果您已经使用 Elastic Scout Driver,建议您在安装 Elastic Scout Driver Plus 之前更新它。

composer update babenkoivan/elastic-scout-driver

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

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

使用

查询

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

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

ElasticScoutDriverPlus\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 对象的信息,并学习如何对搜索结果进行分页。

自定义路由

如果您想为您的模型使用 自定义分片路由,请覆盖 shardRouting 方法

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

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

预加载关系

有时您需要使用相关数据对模型进行索引

class Book extends Model
{
    use ElasticScoutDriverPlus\Searchable;
    
    public function toSearchableArray()
    {
        return [
            'title' => $this->title,
            'price' => $this->price,
            'author' => $this->author->only(['name', 'phone_number']),
        ];
    }
}

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

class Book extends Model
{
    use ElasticScoutDriverPlus\Searchable;
    
    public function toSearchableArray()
    {
        return [
            'title' => $this->title,
            'price' => $this->price,
            'author' => $this->author->only(['name', 'phone_number']),
        ];
    }
    
    public function searchableWith()
    {
        return ['author'];
    }
}

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