2020-09-25 17:53:42
围观(7495)
下载安装 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查询每科分数最高的