怎么在laravel中使用elaticsearch
发表于:2025-11-18 作者:千家信息网编辑
千家信息网最后更新 2025年11月18日,这篇文章主要讲解了"怎么在laravel中使用elaticsearch",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么在laravel中使用elat
千家信息网最后更新 2025年11月18日怎么在laravel中使用elaticsearch
这篇文章主要讲解了"怎么在laravel中使用elaticsearch",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么在laravel中使用elaticsearch"吧!
安装相关扩展包
guzzlehttp/guzzle
elasticsearch/elasticsearch
laravel/scout
babenkoivan/scout-elasticsearch-driver
predis/predis 数据量大需要使用队列同步、拉取数据时安装
1.安装 guzzlehttp/guzzle
composer require guzzlehttp/guzzle
在 app/Services 目录下编写 Http 服务类
client = new Client(['verify' => false, 'timeout' => 0,]); } /** * 发送 get 请求 * @param $url * @param array $aQueryParam * @param string $isDecode * [@return](https://learnku.com/users/31554) mixed * @throws \GuzzleHttp\Exception\GuzzleException */ public function get($url, $aQueryParam = [], $isDecode = true) { $response = $this->client->request('GET', $url, [ 'query' => $aQueryParam ]); if($isDecode){ return \GuzzleHttp\json_decode($response->getbody()->getContents(), true); } return $response->getbody()->getContents(); } /** * 发送 post 请求 * @param $url * @param array $aParam * @param string $type * @param string $isDecode * [@return](https://learnku.com/users/31554) mixed * @throws \GuzzleHttp\Exception\GuzzleException */ public function post($url, $aParam = [], $type = 'form_params', $isDecode = true) { $aOptions = []; // Sending application/x-www-form-urlencoded POST if ($type == 'form_params') { $aOptions['form_params'] = $aParam; } // upload JSON data if ($type == 'json') { $aOptions['json'] = $aParam; } $response = $this->client->request('POST', $url, $aOptions); if($isDecode){ return \GuzzleHttp\json_decode($response->getbody()->getContents(), true); } return $response->getbody()->getContents(); } /** * 发送 put 请求 * @param $url * @param array $aParam * @param string $type * @param string $isDecode * [@return](https://learnku.com/users/31554) mixed * @throws \GuzzleHttp\Exception\GuzzleException */ public function put($url, $aParam = [], $type = 'form_params', $isDecode = true) { $aOptions = []; // Sending application/x-www-form-urlencoded POST if ($type == 'form_params') { $aOptions['form_params'] = $aParam; } // upload JSON data if ($type == 'json') { $aOptions['json'] = $aParam; } $response = $this->client->request('PUT', $url, $aOptions); if($isDecode){ return \GuzzleHttp\json_decode($response->getbody()->getContents(), true); } return $response->getbody()->getContents(); } /** * 保存远程文件到本地 * 跟随第三方服务器url重定向 * @param $url * [@return](https://learnku.com/users/31554) bool|string */ public function getRemoteFile($url) { $jar = new CookieJar(); $aOptions = ['cookies' => $jar]; $response = $this->client->request('GET', $url, $aOptions); return $response->getBody()->getContents(); }}2.安装 elasticsearch/elasticsearch
composer require elasticsearch/elasticsearch
3.安装 laravel/scout
composer require laravel/scoutphp artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
4.安装 scout 第三方驱动 babenkoivan/scout-elasticsearch-driver
composer require babenkoivan/scout-elasticsearch-driverphp artisan vendor:publish --provider="ScoutElastic\ScoutElasticServiceProvider"
scout 服务配置,在 env 中增加配置项
// 驱动的host,若需账密:http://es_username:password@127.0.0.1:9200SCOUT_ELASTIC_HOST=elasticsearch:9200// 驱动SCOUT_DRIVER=elastic// 队列配置,数据量大时建议开启SCOUT_QUEUE=true
5.安装 predis/predis
composer require predis/predis
初始化 elatic Template
这里以 artisan 命令的方式配置 生成命令文件
php artisan make:command EsInit
http = new HttpService(); } /** * Execute the console command. * * [@return](https://learnku.com/users/31554) mixed */ public function handle() { $this->createTemplate(); } protected function createTemplate() { $aData = [ /* * 这句是取在scout.php(scout是驱动)里我们配置好elasticsearch引擎的index项。 * PS:其实都是取数组项,scout本身就是return一个数组, * scout.elasticsearch.index就是取 * scout[elasticsearch][index] * */ 'template'=>config('scout.elasticsearch.index'), 'mappings'=>[ 'articles' => [ 'properties' => [ 'title' => [ 'type' => 'text' ], 'content' => [ 'type' => 'text' ], 'created_at' => [ 'format' => 'yy-MM-dd HHss', 'type' => 'date' ], 'updated_at' => [ 'format' => 'yy-MM-dd HHss', 'type' => 'date' ] ] ] ], ]; $url = config('scout.elasticsearch.hosts')[0] . '/' . '_template/rtf'; $this->http->put($url,$aData,'json'); }}生成检索 model
php artisan make:model Models/Article
创建 model 索引配置文件
Elasticsearch\ArticleIndexConfigurator.php
[ 'analyzer' => [ 'es_std' => [ 'type' => 'standard', 'stopwords' => '_spanish_' ] ] ] ];}
创建 model 检索规则文件
Elasticsearch\SearchRules\ArticleRule.php
[ 'title' => [ 'type' => 'unified', ], 'content' => [ 'type' => 'unified', ], ] ]; } //进行 match 搜索,会分词 public function buildQueryPayload() { $query = $this->builder->query; return [ 'must' => [ 'query_string' => [ 'query' => $query, ], ], ]; }}
设置 model Mapping 及检索字段
class Article extends Model{ protected $indexConfigurator = ArticleIndexConfigurator::class; use Searchable; /** * 检索规则 * @var string[] */ protected $searchRules = [ ArticleRule::class ]; // 设置模型字段的映射关系 protected $mapping = [ 'properties' => [ 'id' => [ 'type' => 'integer', ], 'title' => [ 'type' => 'text', 'analyzer' => 'ik_max_word', 'search_analyzer' => 'ik_max_word', 'index_options' => 'offsets', 'store' => true ], 'content' => [ 'type' => 'text', 'analyzer' => 'ik_max_word', 'search_analyzer' => 'ik_max_word', 'index_options' => 'offsets', 'store' => true ], 'number' => [ 'type' => 'integer', ], ], ]; /** * 设置 es 检索返回的字段 * [@return](https://learnku.com/users/31554) array */ public function toSearchableArray() { return [ 'id' => $this->id, 'title' => $this->title, 'content' => $this->content, ]; }}使用步骤
生成 elatic Template 类似 mysql 表结构
php artisan es:init
更新 elatic 类型映射
php artisan elastic:update-mapping "App\Models\Article"
数据库数据导入 elatic
php artisan scout:import "App\Models\Article"
PS: 其他命令
清空 elatic 数据
php artisan scout:flush "App\Models\Article"
使用检索
$query = Article::search('二胡') ->paginateRaw(3,'article',1); dd($query->items()['hits']);其他使用请自行查看文档
感谢各位的阅读,以上就是"怎么在laravel中使用elaticsearch"的内容了,经过本文的学习后,相信大家对怎么在laravel中使用elaticsearch这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
数据
检索
配置
文件
驱动
命令
字段
就是
学习
服务
生成
内容
数组
第三方
规则
队列
下编
二胡
建议
引擎
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中控f7 数据库
做好了网络技术维护工作
网络安全属于什么级别的
软件开发助理工程师干什么工作
工控网络安全建设常见问题
搜索框传数据库
学计算机网络技术要学高等数学吗
sql管理服务器停止
游戏软件开发 毕业论文
侠客行互联网科技有限公司
免费加速器服务器
access数据库怎么查询
如何看网络安全课
wps 同步私人服务器
网络安全方面的国际证书
ps5要备份哪几个服务器
网络安全为什么很重要
腾讯云服务器包月价格表
做oracle数据库开发
本地服务器数据云端备份
龙泉启扬网络技术有限公司
台湾免备案服务器
饥荒服务器人物存档
利用网络技术构建灵动课堂
嵌入式软件开发区小吃街青岛
软件开发公司员工日常工作视频
新型网络安全功能
网络安全手抄容幼儿园
温州软件开发厂
数据库系统的安全和管理