倚楼听风雨
淡看江湖路

全文搜索引擎 Elasticsearch 入门以及踩坑记录详细版

最近个人搞项目需要用到 Elasticsearch 这款分布式并且支持 RESTful 风格的全文搜索引擎,其实这个框架是基于 Lucene 开源库发展起来的,在学习和使用过程中,无论是部署还是调试,遇到了比较多的问题,并且前期准备的过程步骤也比较多,于是开一篇文章,记录一下,而且对于这款全文搜索引擎老四也仅仅只是停留在初级使用阶段,有很多地方也都不熟练,这里只是分享一下关于 Elasticsearch 部署、中文分词、可视化界面等初级入门经验,希望路过的大佬、同仁一起交流。

关于 Elasticsearch 的背景介绍老四也就不过多哔哔,比较详细的介绍可以参考一下维基百科即可。

CentOS 7 中安装 JRE 8教程

Elasticsearch 部署之前需要 JRE 的支持,目前还是有很多人可能还是不太熟练的在 Linux 系统中配置 Java 运行环境,这里老四简单的讲一下如何配置 Java 运行环境,因为在 Linux 系统中我们基本只是运行,所以不需要安装 JDK,我们只安装 JRE 即可。

一、官网下载 JRE 8

由于可能直接在官网下载需要登陆并且下载速度感人,老四已经在之前的文章《Java 开发相关软件工具国内镜像合集》分享过,可以前往使用百度网盘下载。

二、将安装包上传至服务器当中,目录你自己随意定吧,解压移动到你想安装的目录位置即可,我一般喜欢放在「/home/java」当中。

三、配置环境变量即可,首先编辑环境变量配置文件「vi /etc/profile 」,然后在文件末尾处加入下面的代码:

export JAVA_HOME=/home/java

export JRE_HOME=/home/java/jdk1.8.0_221

export CLASSPATH=$JRE_HOME/lib/rt.jar:$JRE_HOME/lib/ext

export PATH=$PATH:$JRE_HOME/bin

修改环境变量之后我们需要使变量即时生效,执行「source /etc/profile」命令即可。配置完毕后使用「java」、「javac」「java -version」等命令验证即可。

Elasticsearch 部署到 Linux CentOS 服务器

由于老四目前是 macOS,所以使用的虚拟机,关于 Linux CentOS 的虚拟机老四这里推荐 VMware Fusion,VMware Fusion 是 macOS 下专用的虚拟机工具,老四之前分享过一些 Windows 上的关于 VMware 的一些激活码,相关可以参考《随手分享一下各版本VMware的一些激活码以及最新版VMware安装文件 持续更新》这篇文章。至于在 macOS 系统下,VMware Fusion 也是不免费的,需要破解的,在发文截止前,老四已经分享过 VMware Fusion 最新版的安装程序和 KeyGen 破解文件,相关文章可以参考《最新 macOS 下 VMware Fusion 虚拟机破解版分享》。

安装完 VMware 之后,然后在下载一个 LInux 的安装包就可以安装了,具体的安装教程不需要老四多哔哔了吧?我选择的 CentOS 7,这里提一下,由于不可描述的原因,你下载可能会比较慢,不过国内有大量的镜像供你选择,不知道的可以参考《随手分享一下国内开源软件镜像站点 持续更新》。

系统安装好之后就可以部署 Elasticsearch 了,去官网下载最新的安装包,一样,也是上传至服务器,或者直接在 Linux 系统中使用「wget Elasticsearch download url」命令下载解压。

截止到发文时间,官网最新版已经更新到了 7.3.2,不过老四学习和使用的版本是 6.3.0 版本,因为后面的分词插件需要使用到「IK」分词插件,这个插件的使用需要与 Elasticsearch 版本相对应,所以选择了 6 版本的最新版本来学习使用,建议你学习使用也不要进行过高版本的使用,否则遇到一些未知的问题解决起来很棘手。

跟 JRE 的安装差不多,将下载好的 Elasticsearch 安装包解压,然后移动到你想安装的路径位置,然后运行「sh /home/es/elasticsearch-6.3.0/bin/elasticsearch」 命令即可启动,如果你能顺利的启动成功,浏览器直接输入「IP:9200」能看到一串 JSON 就是启动成功了。

Elasticsearch 部署注意事项:

一、Elasticsearch 需要在非 root 用户下启动,建议新建一个「elastic」用户进行启动。

二、Elasticsearch 默认不让外网访问,所以首先需要关闭你服务器的防火墙,命令如下:

systemctl stop firewalld.service

systemctl disable firewalld.service

如果你不想关闭防火墙,那么只需要开放「9200」端口,具体命令可以参考老四之前的《常用 Linux 命令操作集(CentOS) 持续更新》文章。然后我们需要编辑 Elasticsearch 配置文件,改成允许外网 IP 访问。编辑「/home/es/elasticsearch/config/elasticsearch.yml 」文件,将属性 network.host 和 http.port 前面的注释去掉, 然后将 network.host 改成你服务器的 IP 地址即可。

Elasticsearch 启动过程错误集锦

Elasticsearch 入门有的时候还是比较费劲的,老四在折腾的时候也的确遇到比较多的问题,在此记录一些 Elasticsearch 部署启动过程中经常报错的一些问题,将这些问题一一列举,希望遇到同样问题的小伙伴有个参考。

首先说一下,想要部署 Elasticsearch,要求你服务器的内存配置估计最少也得 4-6 G左右,否则很可能撑不起来项目启动,直接告诉你内存溢出或者无响应,所以如果是开虚拟机部署测试的时候要将虚拟机的内存最好分配的高一些,要不然就别玩了。

一、org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root

这个的意思就是 Elasticsearch 不能使用 root 账户进行启动,其实在 Linux 中我们应该尽量避免使用 root 账户进行业务操作,这些东西本应该都是有一个业务账号进行处理的。这里如上所说,可以新建一个「elastic」用户,然后切换到这个用户进行 Elasticsearch 的启动操作。相关命令如下:

  • useradd elastic — 添加一个用户,你也可以再加一个同名的用户组,groupadd elastic
  • chown -R elastic:elastic /home/es/elasticsearch-6.3.0/ — 给 es 目录授权,允许 elastic 账户对 Elasticsearch 进行操作
  • su elastic — 切换到 elastic 账户,再次执行 Elasticsearch 启动操作

二、ERROR: [2] bootstrap checks failed

[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

这两个错误其实在报错中已经告诉我们怎么做了,它是因为 Linux 中最大描述文件数不能满足 Elasticsearch 进程处理,我们需要分别将最大文件描述树扩大到 65536,并且将当前用户虚拟内存调到 2G 左右。相关操作如下:

第一个错误:root 用户下修改「/etc/security/limits.conf」文件,添加如下数据行即可,

* hard nofile 65536
* soft nofile 65536

第二个错误:

sudo sysctl -w vm.max_map_count=2621441

或者也是修改配置文件「/etc/sysctl.conf 」,添加「vm.max_map_count=2621441」,接着设置一下系统永久改变这个变量,「sudo sysctl -p /etc/sysctl.conf」,最后执行「/sbin/sysctl -p」命令 sysctl.conf 文件立即生效即可。我就不截图了。

三、Elasticsearch6.3 max number of threads [2048] for user [*] is too low, increase to at least [4096]

这个问题也是比较明显的,懂点英语的应该都知道是什么意思吧?告诉你当前用户的最大线程数太低了,建议增加到 4096。首先打开「/etc/security/limits.d/」目录,看看目录里面有没有「test-limits.conf」文件,没有就新建一个,建完之后新增如下属性配置,保存即可。

* soft nofile 65536

* hard nofile 131072

* soft nproc 4096

* hard nproc 4096

最后可以使用「ulimit -a」命令验证一下,查看 「max user processes」是否是已经被改为 4096 了。

全文搜索引擎 Elasticsearch 入门以及踩坑记录详细版的图片-高老四博客 第1张

Elasticsearch 安装 IK 中文分词插件

作为一款分布式搜索引擎,对于我们国内来说,最重要的就是要支持中文搜索,对于我们来说才有很大的使用价值。所以 Elasticsearch 在有着强悍的搜索技术的同时,也存在这牛逼的中文分词插件「IK」,并且这款插件处理起来中文起来非常棒,性能也比较快。其实 Elasticsearch 也有自己默认的中文分词技术,但是不是非常友好,「IK」在企业级是属于比较常用的中文分词插件,所以着重来说一下 「IK」 插件的安装。

IK 也是一个开源并且基于 Java 语言开发的轻量级的中文分词工具包,和 Elasticsearch 一样都是以开源项目 Luence 为应用主体,结合词典分词和文法分析算法的中文分词组件。我们在安装时,官方要求我们下载的插件版本要与 Elasticsearch 版本一一对应,否则可能会有很多意想不到的异常抛出。具体对应关系可以参考 IK GitHub 主页:

至于 IK 的安装方式,根据主页的介绍,有两种安装方式,一种使用 GitHub 源,在服务器上在线下载解压安装重启 Elasticsearch 服务,由于国内的镜像速度比较慢,所以老四采用的是第二种方式,先把对应版本的插件安装包下载到电脑本地,然后通过 ftp 上传到服务器上面,解压并且移动到 Elasticsearch 的安装目录下的「plugins」即可,然后重新启动 Elasticsearch 服务即可。

全文搜索引擎 Elasticsearch 入门以及踩坑记录详细版的图片-高老四博客 第2张

还有一款中文分词插件,叫做「smartcn」,据说是中科院研发的,以前的 Lucene 分词插件据说也是中科院弄的,我没太多研究,但是底层都是基于 Lucene,所以都差不太多,这个中文分词跟 IK 的主要区别就是 IK 可以自定义词库,但是「smartcn」属于官方推荐的,安装起来也比较简单,这里老四就不详细的描述了,可以自行网上搜索安装插件。

Elasticsearch 安装 Head 可视化连接工具

Elasticsearch 是没有 web 可视化界面的,不过好在开源社区的强大,一个产品服务的火爆总是会给我们带来相应的便利。「elasticsearch-head」就是 Elasticsearch 的前端可视化插件,不过安装起来需要使用 npm 来安装,所以在安装 「head」插件之前需要配置 NodeJS 环境,我们参考文章下一主题的教程,先把环境搭建好。

搭建好之后,老四建议将 head 插件安装在「/usr/local」目录位置,具体安装参考 head 官方主页的方式即可,

Running with built in server

  • git clone git://github.com/mobz/elasticsearch-head.git — 这也是 head 插件的 GitHub 的主页地址
  • cd elasticsearch-head
  • npm install
  • npm run start
  • open http://服务器地址:9100/

安装过程可能会因为网络问题有点小慢,耐心等待一下即可,还有就是记住一定要配置下文提及到的 npm 的淘宝镜像,要不然会等到花儿都谢了。。。

安装并且启动 head 插件成功之后,访问上面的 head 页面地址,然后将已经启动好的 Elasticsearch 服务地址和端口号(ip地址:9200)输入到 head 插件界面当中进行连接即可,接下来就可以使用页面端对 Elasticsearch 进行操作了,无论是建立索引,增加数据等均可以完成,同时也支持 JSON 数据提交操作等。

全文搜索引擎 Elasticsearch 入门以及踩坑记录详细版的图片-高老四博客 第3张

Linux CentOS 下NodeJS 安装教程

NodeJS 早在很久以前就已经火爆了,现在随着前后端分离,前端开始大量的使用 React、Vue 等高效框架,NodeJS 变得越来越重要,是现在前端工作人员必须掌握的技能,不过老四几乎不玩前端,所以关于前端这些环境的玩的也是皮毛,只是能支撑自己的项目跑起来,这些基本的环境配置希望给你做个参考:

NodeJS 安装教程

NodeJs 的安装有很多种方式,但是我们常用的 yum 安装方式无法安装,因为 Linux 镜像中没有提供 NodeJS,不过你想这么安装也不是可以,网上应该会有那种第三方 rpm 源供你操作。老四使用的还是官网下载二进制包,上传到服务器解压,配置环境变量这种方式,跟 JRE 安装的方式类似。

我一般是安装在「/usr/local」目录,解压之后,我们同样需要配置 NodeJS 的环境变量使其生效,在「/etc/profile」文件末尾添加如下配置代码:

export NODE_HOME=/usr/local/node-v10.16.3-linux-x64

export PATH=$NODE_HOME/bin:$PATH

配置之后,先让环境变量即时生效,执行「source /etc/profile」命令,接下来你就可以使用「node -v」、「npm -v」命令进行验证了。其实以前的 NodeJS 是不带 npm 工具的,这个 npm 你可以理解为安装包的管理工具,就是通过 npm 来管理各种库、项目模块引用的一些公共类库等之间的依赖,像是 Java 体系中的 Maven,不过现在最新的版本都是自行集成 npm 工具,不需要在此下载了。

配置 npm 淘宝镜像

由于不可描述的原因,在「npm install」的时候,如果直接请求国外的下载源基本不是 DNS 污染就是被墙,下载速度极慢,还在国内的各种大型互联网公司或者高校都提供了镜像地址,这样可以使我们下载依赖包的时候请求国内的服务器,速度很快,如上文所述,老四分享过国内镜像地址集合,可以参考收藏留作备用。

所以在使用之前,我们最好配置一下 npm 国内镜像,这里还是推荐阿里的镜像,极速稳定,并且官方宣称实时同步,总之体验极好。安装好 NodeJS 之后在服务器中直接执行如下命令即可完成淘宝 npm 镜像配置:

npm config set registry https://registry.npm.taobao.org

npm config get registry

好了,关于 Elasticsearch 的一次线上部署模拟使用大概就是这么个情况,为了你们可能资源下载缓慢的问题,文末提供了一些文中提到的安装包供下载,所有资源文末自助获取下载,没有账号的需要邮箱注册一下小站。

更博不易,如果觉得文章对你有帮助并且有能力的老铁烦请捐赠盒烟钱,点我去赞助。或者扫描文章下面的微信/支付宝二维码打赏任意金额(点击「给你买杜蕾斯」),也可扫描小站放的支付宝领红包二维码,线下支付享受优惠的同时老四也可以获得对应赏金,老四这里抱拳谢谢诸位了。捐赠时请备注姓名或者昵称,因为您的署名会出现在赞赏列表页面,您的捐赠钱财也会被用于小站的服务器运维上面,再次抱拳感谢。

资源下载

隐藏内容:******,购买后可见!

下载价格:0 G币

您需要先后,才能购买资源

欢迎访问高老四博客(glorze.com),本站技术文章代码均为老四亲自编写或者借鉴整合,其余资源多为网络收集,如涉及版权问题请与站长联系。如非特殊说明,本站所有资源解压密码均为:glorze.com。

赞(13) 给你买杜蕾斯
本站原创文章受自媒体平台原创保护,未经允许不得转载高老四博客 » 全文搜索引擎 Elasticsearch 入门以及踩坑记录详细版

开始你的表演 抢沙发

觉得文章有用就打赏一下老四,鼓励我更好的创作

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册