ES安装教程

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 容器。下面是对命令的解释:

  1. docker run -d: 这部分表示在后台运行容器。
  2. –name es: 为容器指定一个名字,这里是 “es”。
  3. -e “ES_JAVA_OPTS=-Xms512m -Xmx512m”: 设置 Java 虚拟机的参数,包括初始堆内存大小 (-Xms) 和最大堆内存大小 (-Xmx),这里都设置为 512MB。
  4. -e “discovery.type=single-node”: 设置 Elasticsearch 的节点发现机制为单节点,因为在这个配置中只有一个 Elasticsearch 实例。
  5. -v es-data:/usr/share/elasticsearch/data: 将容器内 Elasticsearch 的数据目录挂载到宿主机的名为 “es-data” 的卷上,以便数据持久化。
  6. -v es-plugins:/usr/share/elasticsearch/plugins: 类似上面,将容器内 Elasticsearch 的插件目录挂载到宿主机的名为 “es-plugins” 的卷上。
  7. –privileged: 赋予容器一些特权,可能会有一些安全风险,需要慎用。
  8. –network es-net: 将容器连接到名为 “es-net” 的网络上,目的是为了与其他容器进行通信。
  9. -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

例如:

http://192.168.27.129: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”: “乒乓球明年总冠军”分成了【乒乓球】【明年】【总冠军】

这样看的话,这样的分词效果达到了我们的要求。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部