Laravel怎么使用scout集成elasticsearch做全文搜索

下面由laravel教程栏目给大家介绍laravel怎么使用scout集成elasticsearch做全文搜索,希望对需要的朋友有所帮助!

Laravel怎么使用scout集成elasticsearch做全文搜索

仅限于 es6.8版本
laravel 5.5版本

安装需要的组件

composer require tamayo/laravel-scout-elastic composer require laravel/scout

如果composer require laravel/scout 出现报错

Using version ^6.1 for laravel/scout ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages.    Problem 1     - tamayo/laravel-scout-elastic 4.0.0 requires laravel/scout ^5.0 -> satisfiable by laravel/scout[5.0.x-dev].     - tamayo/laravel-scout-elastic 4.0.0 requires laravel/scout ^5.0 -> satisfiable by laravel/scout[5.0.x-dev].     - tamayo/laravel-scout-elastic 4.0.0 requires laravel/scout ^5.0 -> satisfiable by laravel/scout[5.0.x-dev].     - Conclusion: don't install laravel/scout 5.0.x-dev     - Installation request for tamayo/laravel-scout-elastic ^4.0 -> satisfiable by tamayo/laravel-scout-elastic[4.0.0].   Installation failed, reverting ./composer.json to its original content.

那么使用命令

composer require laravel/scout ^5.0

修改一下配置文件(config/app.php),添加如下两个provider

'providers' => [           //es search 加上以下内容           LaravelScoutScoutServiceProvider::class,           ScoutEnginesElasticsearchElasticsearchProvider::class,   ]

添加完成,执行命令,生成config文件

php artisan vendor:publish --provider="LaravelScoutScoutServiceProvider"

修改config/scout.php

    'driver' => env('SCOUT_DRIVER', 'elasticsearch'),      'elasticsearch' => [         'index' => env('ELASTICSEARCH_INDEX', '你的Index名字'),         'hosts' => [             env('ELASTICSEARCH_HOST', ''),         ],     ],

在.env 配置ES的 账号:密码@连接

ELASTICSEARCH_HOST=elastic:密码@你的域名.com:9200

创建一个生成mapping的命令行文件,到 app/console/Commands

<?php namespace AppConsoleCommands; use GuzzleHttpClient; use IlluminateConsoleCommand;  class ESInit extends Command {      protected $signature = 'es:init';      protected $description = 'init laravel es for news';      public function __construct() { parent::__construct(); }      public function handle() { //创建template         $client = new Client(['auth'=>['elastic', 'yourPassword']]);         $url = config('scout.elasticsearch.hosts')[0] . '/_template/news';         $params = [             'json' => [                 'template' => config('scout.elasticsearch.index'),                 'settings' => [                     'number_of_shards' => 5                 ],                 'mappings' => [                     '_default_' => [                         'dynamic_templates' => [                             [                                 'strings' => [                                     'match_mapping_type' => 'string',                                     'mapping' => [                                         'type' => 'text',                                         'analyzer' => 'ik_smart',                                         'ignore_above' => 256,                                         'fields' => [                                             'keyword' => [                                                 'type' => 'keyword'                                             ]                                         ]                                     ]                                 ]                             ]                         ]                     ]                 ]             ]         ];         $client->put($url, $params);          // 创建index         $url = config('scout.elasticsearch.hosts')[0] . '/' . config('scout.elasticsearch.index');          $params = [             'json' => [                 'settings' => [                     'refresh_interval' => '5s',                     'number_of_shards' => 5,                     'number_of_replicas' => 0                 ],                 'mappings' => [                     '_default_' => [                         '_all' => [                             'enabled' => false                         ]                     ]                 ]             ]         ];         $client->put($url, $params);      } }

在kernel中注册这个命令

<?php  namespace AppConsole;  use AppConsoleCommandsESInit; use IlluminateConsoleSchedulingSchedule; use IlluminateFoundationConsoleKernel as ConsoleKernel;  class Kernel extends ConsoleKernel {     /**      * The Artisan commands provided by your application.      *      * @var array      */     protected $commands = [         ESInit::class     ];

执行这个命令 生成 mapping

 php artisan es:init

修改model支持 全文搜索

<?php namespace AppActivityNewsModel;  use AppModelCategory; use AppStarModelStar; use IlluminateDatabaseEloquentModel; use LaravelScoutSearchable;   class ActivityNews extends Model {     use Searchable;      protected $table = 'activity_news';     protected $fillable = [         'type_id',         'category_id',         'title',         'sub_title',         'thumb',         'intro',         'star_id',         'start_at',         'end_at',         'content',         'video_url',         'status',         'is_open',         'is_top',         'rank',     ];      public function star()     {         return $this->hasOne(Star::class, 'id', 'star_id');     }      public function category()     {         return $this->hasOne(Category::class, 'id', 'category_id');     }      public static function getActivityIdByName($name)     {         return self::select('id')             ->where([                 ['status', '=', 1],                 ['type_id', '=', 2],                 ['title', 'like', '%' . $name . '%']             ])->get()->pluck('id');     }  }

导入全文索引信息

php artisan scout:import "AppActivityNewsModelActivityNews"

测试简单的全文索引

php artisan tinker  >>> AppActivityNewsModelActivityNews::search('略懂皮毛')->get();

相关推荐:最新的五个Laravel视频教程

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享