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

下面由laravel教程欄目給大家介紹laravel怎么使用scout集成elasticsearch做全文搜索,希望對(duì)需要的朋友有所幫助!

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

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

安裝需要的組件

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

如果composer require laravel/scout 出現(xiàn)報(bào)錯(cuò)

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),添加如下兩個(gè)provider

'providers' => [           //es search 加上以下內(nèi)容           LaravelScoutScoutServiceProvider::class,           ScoutEnginesElasticsearchElasticsearchProvider::class,   ]

添加完成,執(zhí)行命令,生成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的 賬號(hào):密碼@連接

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

創(chuàng)建一個(gè)生成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() { //創(chuàng)建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);          // 創(chuàng)建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中注冊(cè)這個(gè)命令

<?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     ];

執(zhí)行這個(gè)命令 生成 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');     }  }

導(dǎo)入全文索引信息

php artisan scout:import "AppActivityNewsModelActivityNews"

測(cè)試簡(jiǎn)單的全文索引

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

相關(guān)推薦:最新的五個(gè)Laravel視頻教程

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊11 分享