设为首页 加入收藏

TOP

在 Laravel 项目中使用 Elasticsearch 做引擎,scout 全文搜索(小白出品, 绝对白话)(一)
2019-08-23 00:39:21 】 浏览:47
Tags:Laravel 项目 使用 Elasticsearch 引擎 scout 全文 搜索 小白 出品 绝对 白话

项目中需要搜索, 所以从零开始学习大家都在用的搜索神器 elasiticsearch. 刚开始 google 的时候, 搜到好多经验贴和视频(中文的, 英文的), 但是由于是第一次接触, 一点概念都没有, 大家介绍的方法又有点不尽相同, 所以有点懵逼, 最后经过层层筛选, 终于找到组织 Elasticsearch: 权威指南. 这是中文翻译版的, 我目前觉得还可以哈, 语言比较朴实. 

然后呢, 因为我自己在从下载安装这些基本的操作过程中都走了很多的弯路, 所以我把最实用的干货还是总结一下, 方便下次直接上手, 最起码可以先跑起来哈. 至于对于 elasticsearch 的深入理解, 大家还是看<<权威指南>>吧.

第一步: 下载安装 ES

我真的是找到了各种版本的下载安装命令, 有些命令根本跑不通, 让我很是头大, 当然, 我自己是 macos 系统的, 所以我的一切安装步骤也都只是保证绝对适用于 macos:

  1. 到官网下载压缩包 根据自己的系统选择哈: 
  2. 把压缩包解压, 解压后的文件我暂且放在我现在做的项目里了, 然后在终端进入这个文件.(这里说明一下, 只要进入你刚刚下载的那个文件夹就行了, 版本号不用 copy 我的, 因为有可能已经更新了.)
cd elasticsearch-6.6.1 

之后, 执行下面的命令启动服务(如果你想把 Elasticsearch 作为一个守护进程在后台运行,那么可以在后面添加参数 -d):

./bin/elasticsearch 

通过以上两步, 应该说 elasticsearch 就已经开始为你的站点服务了. 为了 double check 是否启动成功,可以打开另一个终端,执行以下操作:

curl 'http://localhost:9200/?pretty' 

如果你能得到类似下面的结果, 就意味着你现在已经启动并运行一个 Elasticsearch 节点了:

{ "name" : "27qRw7J", "cluster_name" : "elasticsearch", "cluster_uuid" : "RFuFAGLaRVqtlJOyn-hFWA", "version" : { "number" : "6.6.1", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "1fd8f69", "build_date" : "2019-02-13T17:10:04.160291Z", "build_snapshot" : false, "lucene_version" : "7.6.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" } 

第二步: 安装中文分词插件 IK

Elasticsearch原装分词器会简单地拆分每个汉字,没有根据词库来分词,这样的后果就是搜索结果很可能不是你想要的。这里推荐使用elasticsearch-analysis-ik,支持自定义词库。 文档推荐了两种下载安装方式, 两种我都试了, 但是第二种一直报错, google 了一下, 很多人都有这个问题, 貌似是不支持了....额. 所以就推荐大家直接用第一种方式吧, 就是直接下载文件, 解压之后放到 your-es-root/plugins/ik 文件夹里. 这种方法理论上是没啥问题的, 但是我依然踩了一个很丢人的坑, 估计大部分都不会犯这个错误吧, 就是我是手动解压的, 解压之后生成了一个文件夹, 我就把这个文件夹直接放到 ik 文件夹里了, 然后重启 es 的时候就一直报错. 所以应该是把解压后的文件夹里的所有文件都直接放进 ik 文件夹里~~~~~ 

然后重启 es 就好了. 

第三步: 安装 scout

这个是 laravel 官方推出的全文搜索包, 是针对Eloquent 模型开发的一个简单的,基于驱动的全文检索系统. 如果你跟我一样也是第一次接触, 肯定也会觉得这句话有点晦涩难懂吧, 没关系, 我开始也是这样的. 通过把整个过程理顺之后, 我现在的白话理解就是, elasticsearch 就好比是一个数据库, 只不过跟 mysql 的存储方式不同. 这个数据库虽然使用 java 写的, 但是它也支持很多很多其他语言, 大家都可以以 RESTful API 的形式跟它交互(无非就是存储数据啦). 也就是说, 针对不同的请求它都有相应的接口暴露出来, 那我们可以直接使用这些接口的, 就好像你直接写 sql 语句查数据库一样, 但是 贴心的 laravel 觉得原生请求太不优雅了, 所以它封装了一个包 scout. 好了, 希望我这翻废话能对你理清关系有所帮助. 下面开始安装了:

先安装 scout 的 es 驱动 tamayo/laravel-scout-elastic:

composer require tamayo/laravel-scout-elastic 

, 这里要说明一下, 目前这个包的最新版本是 4.0.0, 而这个版本只支持 scout ^5.0 的版本, 所以尽管此时 scout 的最新版本已经到了 7.0, 我在安装 scout 的时候还是要指明 5.0 的版本:

composer require laravel/scout ^5.0 

通过 laravel/scout 的官方文档可以看到, 它是默认只支持使用 Algolia 驱动, 但是我们的目标是用 es 做驱动, 所以要改一下 config/scout.php 的配置.

找到下面这行代码:

‘driver’ => env(‘SCOUT_DRIVER’, ‘algolia’), 

把它改为:

‘driver’ => env(‘SCOUT_DRIVER’, ‘elasticsearch’), 

之后, 在最下面添加如下代码:

elasticsearch’ => [ ‘index’ => env(‘ELASTICSEARCH_INDEX’, ‘laravel’), ‘config’ => [ ‘hosts’ => [ env(‘ELASTICSEARCH_HOST’, ‘localhost’), ], ], ], 

然后在 .env 文件中添加:

ELASTICSEARCH_INDEX=scout ELASTICSEARCH_HOST=http://localhost:9200 

以上, 算是把工具都准备齐了, 下面就是开干了.

但是, 在开始之前, 还想再说几句废话, 就是建议大家还是看一下  Elasticsearch: 权威指南, 虽然我也还没有完全看完, 但是最起码在我对 es 存储数据的结构, 在

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇创建对象的6种方法 下一篇Bootstrap+PHP表单验证实例

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目