laravel 中使用 elasticsearch

吕鹏
2023-12-01

安装 elasticsearch 和 kibana(用来查看管理elasticsearch中的数据)

参照:https://blog.csdn.net/z_ruitao/article/details/105043521

安装 scout

composer require laravel/scout
# 在config/app.php 的 providers 数组中添加
Laravel\Scout\ScoutServiceProvider::class
# 执行命令发布配置文件
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider

注:如果按照 scout 失败,根据错误信息判断是因为版本过高不兼容,可通过安装低版本来解决

安装 laravel-scout-elastic

composer require tamayo/laravel-scout-elastic
# 在 config/app.php 的 providers 数组中添加
ScoutEngines\Elasticsearch\ElasticsearchProvider::class

修改配置文件 scout.php

'driver' => env('SCOUT_DRIVER', 'elasticsearch'),
//配置elasticsearch引擎
'elasticsearch' => [
    'index' => env('ELASTICSEARCH_INDEX', 'es_index'),//es_index就是索引的名字,根据实际情况来取名
    'hosts' => [
        env('ELASTICSEARCH_HOST', 'http://127.0.0.1:9200'),
    
    ],
]

在 model 中使用

在 model 类中引用 Searchable

use Laravel\Scout\Searchable; # 命名空间
use Searchable;

重写 searchableAs () 方法 toSearchableArray () 方法

    /**
     * 获取模型的可搜索数据
     * @return array
     */
    public function toSearchableArray()
    {
        $data = [
            'id' => $this->id,
            'name' => $this->name
        ];

        return $data;
    }
    // 搜索的type
    public function searchableAs()
    {
        return "_doc";
    }

导入已存在表中的数据

php artisan scout:import "App\Model\Cate"

调用

$article = Cate::search($this->argument('query'))->get();

之后通过模型创建的数据都会自动同步到 elasticsearch

参考:

  1. https://learnku.com/articles/40289
  2. https://learnku.com/articles/25179
 类似资料: