2020-09-25 17:53:42
围观(6783)
下载安装 ElasticSearch
下载地址:https://www.elastic.co/cn/downloads/elasticsearch
下载完成后解压并运行 bin 目录下的 elasticsearch.bat
运行后打开浏览器访问:http://127.0.0.1:9200/
如果页面正常返回显示:
{ "name" : "DESKTOP-NO0J8O3", "cluster_name" : "elasticsearch", "cluster_uuid" : "vy-Md8ouRSS812SvxH-dmg", "version" : { "number" : "7.9.2", "build_flavor" : "default", "build_type" : "zip", "build_hash" : "d34da0ea4a966c4e49417f2da2f244e3e97b4e6e", "build_date" : "2020-09-23T00:45:33.626720Z", "build_snapshot" : false, "lucene_version" : "8.6.2", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
即为成功运行 ElasticSearch.
安装 Laravel Scout
Laravel Scout 可以解决模型自动同步搜索索引的问题。
官方包地址:https://packagist.org/packages/laravel/scout
文档地址:https://laravel.com/docs/master/scout
使用 Composer 安装:
composer require laravel/scout
发布资源:
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
安装 Elasticsearch PHP client
composer require elasticsearch/elasticsearch
安装 laravel-scout-elastic
composer require tamayo/laravel-scout-elastic
安装 IK 分词器
官方地址:https://github.com/medcl/elasticsearch-analysis-ik
发版地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
下载后在 ElasticSearch 目录的 plugins 目录下新建一个 ik 目录并解压。
可以使用 Postman 测试 IK 分词器:
请求头的 Content-Type 一定要设置为 application/json 否则无法请求成功。
配置
在 .ENV 增加配置:
SCOUT_DRIVER=elasticsearch
在 config/scout.php 增加配置:
'elasticsearch' => [ 'hosts' => [ env('ELASTICSEARCH_HOST', 'http://127.0.0.1:9200'), ], ]
模型使用
文档:https://learnku.com/docs/laravel/6.x/scout/5191
可以在 .ENV 添加参数 SCOUT_QUEUE 并设置为 true
设置之后不要忘了执行队列,不然无法同步数据到 ElasticSearch。
在模型中引入:
use Laravel\Scout\Searchable;
之后增删改查就会将数据同步到 ElasticSearch 中。
将数据库中的数据导入到 ElasticSearch:
php artisan scout:import "App\Model\Article"
App\Model\Article 要改成要导入数据的模型。
测试
创建一个写入方法(记得在路由也加上):
public function store() { $model_article = new Article(); $model_article->title = '不败君'; $model_article->content = 'www.bubaijun.com 不败君使用 ES'; $model_article->save(); }
执行之后数据库会保存该记录,同时 ElasticSearch 也会有这条记录。
创建一个查询方法(搜索 同样加在路由进行测试):
public function search() { return Article::search('不败君')->get(); }
返回的数据:
[ { "id": 1, "title": "不败君", "content": "www.bubaijun.com 不败君使用 ES", "created_at": "2020-09-25 17:26:37", "updated_at": "2020-09-25 17:26:37", "deleted_at": null } ]
接着更换不同的搜索词,例如:
public function search() { return Article::search('bubaijun')->get(); }
同样返回这段 JSON,说明此时的查询是通过 ElasticSearch 查询的。
可视化
可以使用可视化工具:kibana 这样管理索引之类的会比较方便。
下载地址:https://www.elastic.co/cn/downloads/kibana
查看索引的信息可以直接访问:http://127.0.0.1:9200/_cat/indices?v (更多接口可以看官方文档)
注
博主使用的 Laravel 版本是 7+ 且每个包都是使用最新的,在其他版本使用 ElasticSearch 可能会有点区别。
用搜索引擎(百度 / 谷歌)搜索 Laravel 使用 ElasticSearch 基本上都是 Laravel 5 需要添加 Service Provider 的。
博主本文编写的时候没创建索引,直接用模型导入数据到 ElasticSearch ,这样会自动以表名作为索引名创建索引。
本文地址 : bubaijun.com/page.php?id=208
版权声明 : 未经允许禁止转载!
上一篇文章: MySQL的排它锁与共享锁
下一篇文章: SQL查询每科分数最高的