Laravel使用scout集成elasticsearch做全文搜索的实现方法
发布:smiling 来源: PHP粉丝网 添加日期:2021-11-02 09:46:30 浏览: 评论:0
这篇文章主要介绍了Laravel使用scout集成elasticsearch做全文搜索的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧。
本文介绍了Laravel使用scout集成elasticsearch做全文搜索的实现方法,分享给大家,具体如下:
安装需要的组件
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 加上以下内容
- Laravel\Scout\ScoutServiceProvider::class,
- ScoutEngines\Elasticsearch\ElasticsearchProvider::class,
- ]
添加完成,执行命令,生成config文件
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
修改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 App\Console\Commands;
- use GuzzleHttp\Client;
- use Illuminate\Console\Command;
- 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', 'Wangcai5388']]);
- $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 App\Console;
- use App\Console\Commands\ESInit;
- use Illuminate\Console\Scheduling\Schedule;
- use Illuminate\Foundation\Console\Kernel 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 App\ActivityNews\Model;
- use App\Model\Category;
- use App\Star\Model\Star;
- use Illuminate\Database\Eloquent\Model;
- use Laravel\Scout\Searchable;
- 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 "App\ActivityNews\Model\ActivityNews"
测试简单的全文索引
php artisan tinker
>>> App\ActivityNews\Model\ActivityNews::search('略懂皮毛')->get();
Tags: Laravel scout elasticsearch
相关文章
- ·Laravel 5.6中的CURD操作(代码示例详解)(2020-01-15)
- ·如何在laravel 5中创建用于XSS防御的中间件? (2020-01-16)
- ·关于Laravel重定向的七种方法详解(2020-01-26)
- ·如何在laravel 5中使用DB事务?(2020-01-31)
- ·Laravel中如何给图片加水印?(2020-04-05)
- ·Laravel框架数据库CURD操作、连贯操作总结(2021-04-10)
- ·Laravel框架路由配置总结、设置技巧大全(2021-04-10)
- ·Laravel框架中扩展函数、扩展自定义类的方法(2021-04-10)
- ·跟我学Laravel之快速入门(2021-04-16)
- ·跟我学Laravel之安装Laravel(2021-04-16)
- ·跟我学Laravel之配置Laravel(2021-04-16)
- ·跟我学Laravel之请求(Request)的生命周期(2021-04-16)
- ·跟我学Laravel之路由(2021-04-16)
- ·跟我学Laravel之请求与输入(2021-04-17)
- ·跟我学Laravel之视图 & Response(2021-04-17)
- ·laravel安装和配置教程(2021-04-19)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)