本文介绍了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 $de ion = \'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\\Data \\Eloquent\\Model;
use Laravel\\Scout\\Searchable;
class ActivityNews extends Model
{
use Searchable;
protected $table = \'activity_news\';
protected $fillable = [
\'type_id\',
\'category_id\',
\' \',
\'sub_ \',
\'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],
[\' \', \'like\', \'%\' . $name . \'%\']
])->get()->pluck(\'id\');
}
}
导入全文索引信息
php artisan scout:import \"App\\ActivityNews\\Model\\ActivityNews\"
测试简单的全文索引
php artisan tinker >>> App\\ActivityNews\\Model\\ActivityNews::search(\'略懂皮毛\')->get();
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
继续阅读与本文标签相同的文章
上一篇 :
vue 双向数据绑定的实现学习之监听器的实现方法
下一篇 :
分布式科学计算与Docker
-
Sharding-Jdbc之读写分离导读
2026-05-19栏目: 教程
-
Sharding-Jdbc分库分表的导读
2026-05-19栏目: 教程
-
日志服务数据加工培训直播资料汇总: 扫平日志分析路上障碍, 实时海量日志加工实践
2026-05-19栏目: 教程
-
OCP-052考试题库汇总(46)-CUUG内部解答版
2026-05-19栏目: 教程
-
Alluxio使用——TensorFlow篇
2026-05-19栏目: 教程
