Laravel 融合 Elasticsearch/Algolia 在个人博客中使用
作者:互联网
1. 安装 elasticsearch
官网网址:https://github.com/medcl/elasticsearch-rtf
2. 启动 elasticsearch 服务
windows 环境下,进入安装目录。点击 elasticsearch.bat 即可。如图既安装成功
注意:elasticsearch 依赖jdk环境,具体环境自己网上安装查看,这里不详述
3.laravel 项目安装配置
安装 scout
composer require laravel/scout
安装 elssticsearch
composer require tamayo/laravel-scout-elastic
安装 GuzzleHttp 包:
composer require Guzzlehttp/guzzle
在 config/app.php 的 providers 数组添加:
Laravel\Scout\ScoutServiceProvider::class,
ScoutEngines\Elasticsearch\ElasticsearchProvider::class,
发布配置文件:
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
发布生成的 config/scout.php 文件添加
'driver' => env('SCOUT_DRIVER', 'elasticsearch'),
'elasticsearch' => [
'index' => env('ELASTICSEARCH_INDEX', 'laravel'),//索引名称
'hosts' => [
env('ELASTICSEARCH_HOST', 'http://127.0.0.1:9200'),
],
],
4. 创建 es 初始化命令
php artisan make:command EsInit
具体实现代码如下:
namespace App\Console\Commands;
use GuzzleHttp\Client;
use Illuminate\Console\Command;
class ESinit extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'es:init';
/**
* The console command description.
*
* @var string
*/
protected $description = 'init laravel';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$client = new Client();
$this->createTemplate($client);
$this->createIndex($client);
}
//创建索引
protected function createIndex($client)
{
$url = config('scout.elasticsearch.hosts')[0].'/'.config('scout.elasticsearch.index');
$client->put($url, [
'json' => [
'settings' => [
'refresh_interval' => '5s',
'number_of_shards' => 1,
'number_of_replicas' => 0,
],
'mappings' => [
'_default_' => [
'_all' => [
'enabled' => false
]
]
]
]
]);
}
//创建模板
protected function createTemplate($client)
{
$url = config('scout.elasticsearch.hosts')[0] .'/_template/rtf';
$client->put($url, [
'json' => [
'template' => '*',
'settings' => [
'number_of_shards' => 1
],
'mappings' => [
'_default_' => [
'_all' => [
'enabled' => true
],
'dynamic_templates' => [
[
'strings' => [
'match_mapping_type' => 'string',
'mapping' => [
'type' => 'text',
'analyzer' => 'ik_smart',
'ignore_above' => 256,
'fields' => [
'keyword' => [
'type' => 'keyword'
]
]
]
]
]
]
]
]
]
]);
}
}
初始化脚本
php artisan es:init
5. 创建数据模型
namespace App\Models;
use Laravel\Scout\Searchable;
class Article extends BaseModel
{
use Searchable;
protected $guarded = [];
protected $table = 'article';
public function toSearchableArray()
{
return [
'title' => $this->title,
'content' => $this->content
];
}
}
6. 创建控制器,并写好路由
namespace App\Http\Controllers\Web;
use App\Http\Controllers\Controller;
use App\Models\Article;
use Illuminate\Http\Request;
class IndexController extends Controller
{
public function search(Request $request)
{
$params=$request->keyword;
$article= Article::search($params)->paginate();
return $this->output($article, '请求成功', STATUS_OK);
}
}
7. 导出数据模型
php artisan scout:import "App\Models\Article"
命令完成会有如下提示,同时 es 里面也会将数据库指定字段写入
注:es 可视化工具自行百度安装。
8 访问路由,最后大功告成
9. 扩展。
Algolia 是法国初创公司为你提供毫秒级的数据库实时搜索服务。在这里我也配置实验了下,具体没有压测,有兴趣的朋友可以尝试下,这里只写简单的使用。具体 elsaticsearch 和 algolia 如何选择,看业务需求具体来选择
在项目 env 文件添加
SCOUT_DRIVER=algolia
SCOUT_PREFIX=
ALGOLIA_APP_ID=XXXXXXX
ALGOLIA_SECRET=XXXXXXXXXXX
这里的 appid 和 secret 需要自己注册获取
官网网址:https://www.algolia.com
注册成功后;
然后执行命令
php artisan scout:import "App\Models\Article"
执行完会发现数据已经写到后台了
然后按照之前配置好多路由去访问
10. 总结
ElasticSearch 作为一款强大的开源分布式搜索与数据分析引擎,可快速从海量数据总找到相关信息,近年来搜索 DBRanKing 一直位列第一。还被广泛应用于大数据近实时分析,包括日志分析,指标监控,信息安全等等,国内很多公司都在使用,腾讯,滴滴,小米,饿了么,今日头条等。所以这里面要学的东西还是很多很多啊,具体数据如何分片,索引如何划分,map 设置,analysis 具体细节,最佳数据模型构建,集群扩展,参数配置,性能调优,等等等,都是我们需要去掌握的,前路漫漫其修远兮啊,加油!
标签:Laravel,use,App,client,scout,elasticsearch,Elasticsearch,Algolia,php 来源: https://blog.csdn.net/cfun_goodmorning/article/details/94746529