安装 elasticsearch
创建用于启动 elasticsearch
服务的用户
ES不能以root用户身份启动,所以必须创建普通用户:
-
创建一个新的
es
用户组[root@sher6j-01 ~]# groupadd es
-
创建新的用户
es6j
并将其放入es
用户组[root@sher6j-01 ~]# useradd es6j -g es
-
修改
es6j
用户的密码[root@sher6j-01 ~]# passwd es6j
之所以上面提示无效的密码,是因为我将密码设置为了
1234
,过于简单,该提示可以忽略,只要重新输入密码即可设置密码成功
用普通用户安装 elasticsearch
服务;
利用ftp工具将安装包上传至es6j
的home
目录下
然后对其进行解压:
[es6j@sher6j-01 ~]$ tar -zxvf elasticsearch-6.8.0.tar.gz
解压后其实就安装成功了,我们进入elasticsearch
的目录进行查看
[es6j@sher6j-01 ~]$ cd elasticsearch-6.8.0/
其主要目录说明如下:
如果要启动elasticsearch
服务,则进入bin
目录下执行启动脚本即可:
[es6j@sher6j-01 elasticsearch-6.8.0]$ cd bin
[es6j@sher6j-01 bin]$ ./elasticsearch
当出现started时代表启动成功
可以看到elasticsearch
对外提供了两个端口9200
和9300
,其中9200
作为Web端口可以用作浏览器访问,而9300
作为TCP端口可以供如Java程序等进行连接。
如果要关闭其服务,用
Ctrl
+C
即可。
我们可以以该主机中的任一用户使用 curl
命令模拟浏览器访问 elasticsearch
的服务:
[root@sher6j-01 ~]# curl http://localhost:9200
如上图可以看见 elasticsearch
响应的 JSON
串,而之所以用 curl
模拟而没有用外部浏览器直接访问,是因为 elasticsearch
默认只能够本机访问。
开启远程连接权限
进入到 config
目录下,编辑其主配置文件 eelasticsearch.yml
[es6j@sher6j-01 elasticsearch-6.8.0]$ cd config/
[es6j@sher6j-01 config]$ vim elasticsearch.yml
在 vim
界面中搜索 network.host
配置项(/
搜索)
原配置文件如下:
将其修改为:network.host: 0.0.0.0
。然后重新启动 elasticsearch
服务。
然后我们发现就出现了如下的错误:
当然还有可能是如下的三个错误,
ERROR: [3] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max number of threads [3802] for user [es6j] is too low, increase to at least [4096]
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
这是因为一旦 elasticsearch
启动了远程连接,其认为是生产模式,所以就需要对内存、线程数等有所要求,所以我们需要将主机调整到符合要求的状态。
修改主机的状态需要用 root
用户:
-
[root@sher6j-01 ~]# vim /etc/security/limits.conf
在文件末尾插入如下参数后保存退出:
* soft nofile 65536 * hard nofile 65536 * soft nproc 4096 * hard nproc 4096
-
重新登录后,即可发现配置已经生效:
[root@sher6j-01 ~]# ulimit -Hn [root@sher6j-01 ~]# ulimit -Sn [root@sher6j-01 ~]# ulimit -Hu [root@sher6j-01 ~]# ulimit -Su
-
[root@sher6j-01 ~]# vim /etc/security/limits.d/20-nproc.conf
修改该配置文件,将其
*
修改为启动elasticsearch
服务的用户名,此处即为es6j
。
修改后:
-
[root@sher6j-01 ~]# vim /etc/sysctl.conf
修改最大线程数,在该配置文件中加入
vm.max_map_count=655360
参数
然后可以执行如下命令对该参数进行检测:
[root@sher6j-01 ~]# sysctl -p
经过以上配置的修改后,我们重新登录 es6j
用户,再次启动 elasticsearch
服务,发现可以启动成功了
再次用外部浏览器访问 http://192.168.56.102:9200/
,即可访问成功:
需要主机关闭防火墙:
[root@sher6j-01 ~]# systemctl stop firewalld
安装 Kibana
由于 elasticsearch
只对外暴露了端口,而没有操作界面,所以我们需要安装一个图形化界面来操作 elasticsearch
,这就是官方提供的 Kibana
,当然了,Kibana
的用途还有很多很多,作为图形化界面操作 elasticsearch
只是其很小的一部分。
安装 kibana
我们以 root
身份安装即可,在 \usr\local\
目录下创建 kibana
目录:
[root@sher6j-01 local]# mkdir kibana
然后用ftp工具将 kibana
安装包上传至该目录:
然后进行解压,解压后进入其目录:
[root@sher6j-01 kibana]# tar -zxvf kibana-6.8.0-linux-x86_64.tar.gz
[root@sher6j-01 kibana]# cd kibana-6.8.0-linux-x86_64/
比较重要的目录就是 bin
和 config
我们进入到 config
目录下修改其配置文件:
[root@sher6j-01 config]# vim kibana.yml
修改如下两处配置改成 kibana
要监听的 elasticsearch
服务的主机地址,当然本机也可以直接用原来的 localhost
:
然后进入 bin
目录运行启动脚本即可:
[root@sher6j-01 bin]# ./kibana
然后在浏览器中访问该地址即可:
安装中文分词器插件
elasticsearch
默认的分词器为标准分词器(Standard Analyzer),标准分词器对于英文为单词分词,对于中文为单字分词。也就是说,如果关键字为“中华人民共和国”,则标准分词器会分为"中"、 “华”、 “人”、 “民”、 “共”、 “和”、 “国”。这无疑对中文的搜索非常不适合,所以我们需要安装 ik
分词器的插件, ik
分词器的相关文档可以参考ik分词器GitHub官网,安装方式也可以使用本地安装或在线安装,这里使用在线安装。
-
由于之前的索引库数据是由标准分词器产生的,这会使
ik
分词器安装错误,所以需要清空之前的索引库数据,即elasticsearch
安装目录下的data
文件夹:[es6j@sher6j-01 elasticsearch-6.8.0]$ rm -rf data/
-
在
bin
目录下之前提到过有各种脚本,其中就有用于在线安装插件的脚本,利用该脚本即可在线安装插件,其用法为:elasticsearch-plugin install 插件地址
所以在 bin
目录下键入如下命令即可,注意该 ik
分词器的版本必须和 elasticsearch
的版本一致!
[es6j@sher6j-01 bin]$ ./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.0/elasticsearch-analysis-ik-6.8.0.zip
当出现 installed
即为安装好该插件:
- 然后就可以重启
elasticsearch
和kibana
来测试该分词器是否生效,可以看到在elasticsearch
启动过程中加载了ik
分词器的插件:
在 kibana
中键入如下命令测试分词器:
GET /_analyze
{
"text": "中华人民共和国国歌",
"analyzer": "ik_smart"
}
可以看到成功对中文进行了分词:
ik_smart
和ik_max_word
的区别,在ik
分词器的官方文档中有所说明:
ik_max_word
: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合,适合 Term Query;ik_smart
: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,适合 Phrase 查询。