1.基本方式安装
2.基于Docker安装Elasticsearch
2.1 创建网络
因为需要部署kibana容器,因此需要让es和kibana容器互联。
[root@bogon howlong]# docker network create es-net
344f17ffe435894bc3ec98f3e3c1ad93cbde41a473576e645a0d24b6111e7e2e
[root@bogon howlong]#
2.2 拉取镜像
以安装Elasticsearch 8.6.0 版本为例
指令:
[root@bogon howlong]# docker pull elasticsearch:8.6.0
8.6.0: Pulling from library/elasticsearch
846c0b181fff: Pull complete
f3516e94dfa9: Pull complete
b8d95ef1999f: Pull complete
69af40093f34: Pull complete
52d2fb478029: Pull complete
14619d64e022: Pull complete
ff00ac3f5836: Pull complete
2eed17832094: Pull complete
5a7083c2053b: Pull complete
Digest: sha256:12d0ff50b96a53d2a8e103ba2e0e69187babc3dcf8bdc88788d019cdebb75c0c
Status: Downloaded newer image for elasticsearch:8.6.0
docker.io/library/elasticsearch:8.6.0
[root@bogon howlong]#
2.3 创建挂载点目录
指令:
[root@bogon howlong]# mkdir -p /usr/share/elasticsearch/data /usr/share/elasticsearch/config /usr/share/elasticsearch/plugins
[root@bogon howlong]#
指令:
chmod 777 /usr/share/elasticsearch/data
chmod 777 /usr/share/elasticsearch/config
chmod 777 /usr/share/elasticsearch/plugins
2.4 部署单点es,创建es容器
指令:
docker run -d \
--name es \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
--privileged \
-v /usr/local/es/data:/usr/local/elasticsearch/data \
-v /usr/local/es/plugins:/usr/local/elasticsearch/plugins \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
elasticsearch:8.6.0
上述 Docker 命令是为了运行 Elasticsearch 容器。下面是对命令的解释:
- docker run -d: 这部分表示在后台运行容器。
- –name es: 为容器指定一个名字,这里是 “es”。
- -e “ES_JAVA_OPTS=-Xms512m -Xmx512m”: 设置 Java 虚拟机的参数,包括初始堆内存大小 (-Xms) 和最大堆内存大小 (-Xmx),这里都设置为 512MB。
- -e “discovery.type=single-node”: 设置 Elasticsearch 的节点发现机制为单节点,因为在这个配置中只有一个 Elasticsearch 实例。
- -v es-data:/usr/share/elasticsearch/data: 将容器内 Elasticsearch 的数据目录挂载到宿主机的名为 “es-data” 的卷上,以便数据持久化。
- -v es-plugins:/usr/share/elasticsearch/plugins: 类似上面,将容器内 Elasticsearch 的插件目录挂载到宿主机的名为 “es-plugins” 的卷上。
- –privileged: 赋予容器一些特权,可能会有一些安全风险,需要慎用。
- –network es-net: 将容器连接到名为 “es-net” 的网络上,目的是为了与其他容器进行通信。
- -p 9200:9200 -p 9300:9300: 将容器内部的端口映射到宿主机上,这里分别是 Elasticsearch 的 HTTP REST API 端口(9200)和节点间通信的端口(9300)。
2.5 编写elasticsearch.yml
先进入es容器
-u 0 是以root用户登录 方便后面修改elasticsearch.yml的配置文件
[root@bogon howlong]# docker exec -u 0 -it es /bin/bash
elasticsearch@6b64658d77d5:~$
跳转到config目录下
elasticsearch@6b64658d77d5:~$ cd config
elasticsearch@6b64658d77d5:~/config$
关闭 密码安全验证
1.指令:
echo 'xpack.security.enabled: false' >> elasticsearch.yml (这种方式给文件添加了一行,有问题)
下载安装vim
apt-get update
apt-get install vim
vim elasticsearch.yml
2.6 重启es容器
指令
docker restart es
退出容器
exit
如果出现there are stopped jobs
jobs
fg %1
2.7 测试Elasticsearch是否安装成功
访问虚拟机地址+端口号,前面配置Elasticsearch 的端口号为:9200
3.基于Docker安装Kibana
3.1 拉取镜像
以安装kibana 8.6.0 版本为例
指令:
docker pull kibana:8.6.0
实例:
[root@bogon howlong]# docker pull kibana:8.6.0
8.6.0: Pulling from library/kibana
846c0b181fff: Already exists
d9d4723b53e8: Pull complete
3ce175049527: Pull complete
c5a9d626f54a: Pull complete
ce0bd3b890fe: Pull complete
4f4fb700ef54: Pull complete
1cb2fe49dd32: Pull complete
7cbec743e1ac: Pull complete
de07a2df0c3f: Pull complete
f138fef302e6: Pull complete
c6afac2b2f31: Pull complete
53c0672d0212: Pull complete
7522efaa8c9c: Pull complete
5e8db7e50c16: Pull complete
Digest: sha256:71d8a59d32b181c3b3c04a4fecf2197f00eb381659510d04261c2cd5d43a0225
Status: Downloaded newer image for kibana:8.6.0
docker.io/library/kibana:8.6.0
[root@bogon howlong]#
3.2 创建挂载点目录
代码:
[root@bogon howlong]# mkdir -p /usr/local/kibana/config /usr/local/kibana/data
[root@bogon howlong]#
chmod 777 /usr/local/kibana/data
chmod 777 /usr/local/kibana/config
3.3 部署kibana,创建kibana容器
实例:
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601 \
kibana:7.16.3
-e ELASTICSEARCH_HOSTS=http://es:9200: 设置 Kibana 运行时连接的 Elasticsearch 节点的地址,这里指定了 Elasticsearch 服务的地址为 http://es:9200,其中 “es” 是 Elasticsearch 服务的容器名,而不是具体的 IP 地址。这是因为在 --network=es-net 中指定了容器连接到 “es-net” 网络,容器名会被解析为相应的 IP 地址。
--network=es-net: 将容器连接到名为 “es-net” 的网络上,确保 Kibana 能够与 Elasticsearch 容器进行通信。
[root@bogon howlong]#
3.4 测试Kibana是否安装成功
访问虚拟机地址+端口号,前面配置Kibana 的端口号为:5601
例如:
4.基于Docker安装IK分词器
4.1 进入Elasticsearch容器
指令:
docker exec -it es /bin/bash
实例:
[root@bogon howlong]# docker exec -it es /bin/bash
elasticsearch@6b64658d77d5:~$
4.2 在线安装IK分词器
注意:安装IK分词器的版本,必须和Elasticsearch的版本一致,
上文安装的是Elasticsearch 8.6.0的,所以接下来安装的IK分词器版本是8.6.0
指令:
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.6.0/elasticsearch-analysis-ik-8.6.0.zip
如果需要安装其他版本的IK分词器,需要把版本号修改即可
如:
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.6.0/elasticsearch-analysis-ik-8.6.0.zip
5.IK分词器安装
1.下载IK
wget https://github.com/medcl/elasticsearch-analysis-ik/archive/v7.16.3.zip
执行如下图:
2.解压IK
由于这里是zip包不是gz包,所以我们需要使用unzip命令进行解压,如果本机环境没有安装unzip,请执行:
yum install zip
yum install unzip
1.解压IK
unzip v7.4.0.zip
3.编译jar包
# 切换到 elasticsearch-analysis-ik-7.4.0目录
cd elasticsearch-analysis-ik-7.4.0/
#打包
mvn package
#出现错误
mvn -v报错:bash: /opt/maven/apache-maven-3.5.3/bin/mvn: Permission denied
解决方案:chmod a+x /opt/apache-maven-3.6.1/bin/mvn
#此命令的作业是:
chmod是权限管理命令change the permissions mode of a file的缩写
chmod a+x 就表示所有人的权限中,增加可执行权限
4) jar包移动
package执行完毕后会在当前目录下生成target/releases目录,将其中的elasticsearch-analysis-ik-7.4.0.zip。拷贝到elasticsearch目录下的新建的目录plugins/analysis-ik,并解压
#切换目录
cd /opt/elasticsearch-7.4.0/plugins/
#新建目录
mkdir analysis-ik
cd analysis-ik
#执行拷贝
cp -R /opt/elasticsearch-analysis-ik-7.4.0/target/releases/elasticsearch-analysis-ik-7.4.0.zip /opt/elasticsearch-7.4.0/plugins/analysis-ik
#执行解压
unzip /opt/elasticsearch-7.4.0/plugins/analysis-ik/elasticsearch-analysis-ik-7.4.0.zip
5)拷贝辞典
将elasticsearch-analysis-ik-7.4.0目录下的config目录中的所有文件 拷贝到elasticsearch的config目录
cp -R /opt/elasticsearch-analysis-ik-7.4.0/config/* /opt/elasticsearch-7.4.0/config
记得一定要重启Elasticsearch!!!
3.使用IK分词器
IK分词器有两种分词模式:ik_max_word和ik_smart模式。
1、ik_max_word
会将文本做最细粒度的拆分,比如会将“乒乓球明年总冠军”拆分为“乒乓球、乒乓、球、明年、总冠军、冠军。
#方式一ik_max_word
GET /_analyze
{
"analyzer": "ik_max_word",
"text": "乒乓球明年总冠军"
}
ik_max_word分词器执行如下:
{
"tokens" : [
{
"token" : "乒乓球",
"start_offset" : 0,
"end_offset" : 3,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "乒乓",
"start_offset" : 0,
"end_offset" : 2,
"type" : "CN_WORD",
"position" : 1
},
{
"token" : "球",
"start_offset" : 2,
"end_offset" : 3,
"type" : "CN_CHAR",
"position" : 2
},
{
"token" : "明年",
"start_offset" : 3,
"end_offset" : 5,
"type" : "CN_WORD",
"position" : 3
},
{
"token" : "总冠军",
"start_offset" : 5,
"end_offset" : 8,
"type" : "CN_WORD",
"position" : 4
},
{
"token" : "冠军",
"start_offset" : 6,
"end_offset" : 8,
"type" : "CN_WORD",
"position" : 5
}
]
}
2、ik_smart
会做最粗粒度的拆分,比如会将“乒乓球明年总冠军”拆分为乒乓球、明年、总冠军。
#方式二ik_smart
GET /_analyze
{
"analyzer": "ik_smart",
"text": "乒乓球明年总冠军"
}
ik_smart分词器执行如下:
{
"tokens" : [
{
"token" : "乒乓球",
"start_offset" : 0,
"end_offset" : 3,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "明年",
"start_offset" : 3,
"end_offset" : 5,
"type" : "CN_WORD",
"position" : 1
},
{
"token" : "总冠军",
"start_offset" : 5,
"end_offset" : 8,
"type" : "CN_WORD",
"position" : 2
}
]
}
由此可见 使用ik_smart可以将文本”text”: “乒乓球明年总冠军”分成了【乒乓球】【明年】【总冠军】
这样看的话,这样的分词效果达到了我们的要求。