thiagoprz/vegvisir-elasticsearch

Vegvisir Elasticsearch - Laravel 搜索索引器

dev-main 2022-05-07 12:18 UTC

This package is auto-updated.

Last update: 2024-09-07 17:36:04 UTC


README

PHPUnit

这是vegvisir包的Elasticsearch适配器,该包提供了增强Laravel应用程序搜索性能的搜索工具。支持直接使用Eloquent实现,同时也提供了使用仓库作为替代方法的可能性。

目录

安装

使用Composer在您的应用程序中安装它:composer require thiagoprz/vegvisir-elasticsearch

配置

如有必要,将服务提供者添加到config/app.php(如果启用自动发现,则无需此步骤)

..
'providers' => [
...
    \Thiagoprz\VegvisirElasticsearch\VegvisirElasticSearchServiceProvider::class,
],
...

运行php artisan vendor:publish以发布配置。

这将添加vegvisir.php文件到config目录。

使用

此适配器连接到Elasticsearch主机,并在您的模型发生变化时插入/更新/删除。

要启用Elasticsearch适配器,只需将相关服务提供者添加到您的应用程序配置中,并定义与您的Elasticsearch主机相关的环境变量。

  1. 在config/app.php中启用VegvisirElasticSearchServiceProvider
<?php
...
    'providers' => [
        ...
        Thiagoprz\VegvisirElasticsearch\VegvisirElasticSearchServiceProvider::class, 
    ],
...
  1. 将以下变量添加到您的.env文件中,以配置Elasticsearch访问
VEGVISIR_ELASTICSEARCH_HOSTS=0.0.0.0:9200,0.0.0.1:9200

您可以添加任意数量的Elasticsearch主机。

  1. 将可搜索特性添加到您的模型中,并建立可搜索字段
use Thiagoprz\Vegvisir\Traits\Searchable;

class Post extends Model
{
    use Searchable;

    ...
    
    /**
     * This method is optional, but recommended in case of tables with too many fields or fields that won't be searched
     */
    public function toSearchArray(): array
    {
        return [
            'id' => $this->id,
            'title' => $this->title,
            'description' => $this->description,
            'created_at' => $this->created_at,
            'updated_at' => $this->updated_at,
        ];
    }
    
    /**
     * Defines fields to be searched
     */
    public function getSearchFields(): array
    {
        return ['title', 'description'];
    }
}
  1. 在EventServiceProvider上附加事件观察器
use Thiagoprz\Vegvisir\Observers\VegvisirObserver;
use App\Models\Post;
...
class EventServiceProvider extends ServiceProvider
{
    ...
    public function boot()
    {
        Post::observe(VegvisirObserver::class);
    }
  1. 创建您的模型仓库(可选)
namespace App\Repositories;

use App\Models\Post;
use Thiagoprz\VegvisirElasticsearch\Repositories\ElasticSearchRepository;

class PostRepository extends ElasticSearchRepository
{
    /**
     * Repository model class
     */
    public $modelClass = Post::class;
} 

贡献

测试

vendor/phpunit/phpunit/phpunit --configuration phpunit.xml tests

支持

问题

请随意创建问题,这将非常有帮助。我会尽快处理。

许可证

此软件包根据MIT许可证授权。