安装ES

  1. 拷贝ES配置文件。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 1)创建网络
docker network create es-net

# 2)获取镜像列表
docker search elasticsearch

# 3)拉取镜像
docker pull elasticsearch:8.12.0

# 4)查看镜像
docker images

# 5)启动容器
docker run -d \
  --name es \
  -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
  -e "discovery.type=single-node" \
  --network es-net \
  -p 9200:9200 \
  -p 9300:9300 \
  elasticsearch:8.12.0

# 6)复制容器对应文件
mkdir -p /home/elasticsearch/{data,plugins,config}
docker cp es:/usr/share/elasticsearch/config /home/elasticsearch
docker cp es:/usr/share/elasticsearch/plugins /home/elasticsearch

# 7)移除nginx容器
docker rm -f es

# 8)给与目录权限
chmod -R 777 /home/elasticsearch

# 9)挂载目录 plugins、data、logs、config/
docker run -d \
  --name es \
  -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
  -e "discovery.type=single-node" \
  -v /home/elasticsearch/data:/usr/share/elasticsearch/data \
  -v /home/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
  -v /home/elasticsearch/config:/usr/share/elasticsearch/config \
  --privileged \
  --network es-net \
  -p 9200:9200 \
  -p 9300:9300 \
  elasticsearch:8.12.0
  1. 相关参数解释:

    • -e "cluster.name=es-docker-cluster":设置集群名称。
    • -e "http.host=0.0.0.0":监听的地址,可以外网访问。
    • -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":内存大小。
    • -e "discovery.type=single-node":非集群模式。
    • -v es-data:/usr/share/elasticsearch/data:挂载逻辑卷,绑定es的数据目录。
    • -v es-logs:/usr/share/elasticsearch/logs:挂载逻辑卷,绑定es的日志目录。
    • -v es-plugins:/usr/share/elasticsearch/plugins:挂载逻辑卷,绑定es的插件目录。
    • --privileged:授予逻辑卷访问权。
    • --network es-net :加入一个名为es-net的网络中。
    • -p 9200:9200:端口映射配置。
  2. ES的9200端口用于数据的交互,9300端口用于集群的通信。

  3. 验证:浏览器输入http://localhost:9200

安装kibana

  1. kibana给我们提供一个elasticsearch的可视化界面。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 1)拉取镜像
docker pull kibana:8.12.0

# 2)安装
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1
  1. 相关参数解释:
    • --network es-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中。
    • -e ELASTICSEARCH_HOSTS=http://es:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch。
    • -p 5601:5601:端口映射配置。
  2. docker查看启动日志看是否启动成功:docker logs -f kibana
  3. 浏览器输入:http://localhost:5601

ES安装IK分词器

在线安装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 1) 进入ES容器
docker exec -it es /bin/bash

# 2) 在线下载并安装
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip

# 3) 推出容器
exit

# 4) 重启ES
docker restart es

离线安装

  1. 查看数据卷目录:docker volume inspect es-plugins
  2. 把下载的7.12.1版本包放入。重启ES。

IK分词器

  1. IK分词器包含两种模式:
    • ik_smart:最少切分。
    • ik_max_word:最细切分。
  2. 测试两种分词。
1
2
3
4
5
GET /_analyze
{
  "analyzer": "ik_smart",
  "text": "美好的一天从清晨开始。"
}
{
  "tokens": [
    {
      "token": "美好",
      "start_offset": 0,
      "end_offset": 2,
      "type": "CN_WORD",
      "position": 0
    },
    {
      "token": "的",
      "start_offset": 2,
      "end_offset": 3,
      "type": "CN_CHAR",
      "position": 1
    },
    {
      "token": "一天",
      "start_offset": 3,
      "end_offset": 5,
      "type": "CN_WORD",
      "position": 2
    },
    {
      "token": "从",
      "start_offset": 5,
      "end_offset": 6,
      "type": "CN_CHAR",
      "position": 3
    },
    {
      "token": "清晨",
      "start_offset": 6,
      "end_offset": 8,
      "type": "CN_WORD",
      "position": 4
    },
    {
      "token": "开始",
      "start_offset": 8,
      "end_offset": 10,
      "type": "CN_WORD",
      "position": 5
    }
  ]
}
1
2
3
4
5
GET /_analyze
{
  "analyzer": "ik_max_word",
  "text": "美好的一天从清晨开始。"
}
{
  "tokens": [
    {
      "token": "美好",
      "start_offset": 0,
      "end_offset": 2,
      "type": "CN_WORD",
      "position": 0
    },
    {
      "token": "的",
      "start_offset": 2,
      "end_offset": 3,
      "type": "CN_CHAR",
      "position": 1
    },
    {
      "token": "一天",
      "start_offset": 3,
      "end_offset": 5,
      "type": "CN_WORD",
      "position": 2
    },
    {
      "token": "一",
      "start_offset": 3,
      "end_offset": 4,
      "type": "TYPE_CNUM",
      "position": 3
    },
    {
      "token": "天",
      "start_offset": 4,
      "end_offset": 5,
      "type": "COUNT",
      "position": 4
    },
    {
      "token": "从",
      "start_offset": 5,
      "end_offset": 6,
      "type": "CN_CHAR",
      "position": 5
    },
    {
      "token": "清晨",
      "start_offset": 6,
      "end_offset": 8,
      "type": "CN_WORD",
      "position": 6
    },
    {
      "token": "开始",
      "start_offset": 8,
      "end_offset": 10,
      "type": "CN_WORD",
      "position": 7
    }
  ]
}

扩展/停用词典

  1. 找到 plugins/IK/config/IKAnalyzer.cfg.xml 文件,添加如下内容。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>IK Analyzer 扩展配置</comment>
    <!--用户可以在这里配置自己的扩展字典 -->
    <entry key="ext_dict">ext.dic</entry>
     <!--用户可以在这里配置自己的扩展停止词字典-->
    <entry key="ext_stopwords">stopword.dic</entry>
    <!--用户可以在这里配置远程扩展字典 -->
    <!-- <entry key="remote_ext_dict">words_location</entry> -->
    <!--用户可以在这里配置远程扩展停止词字典-->
    <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
  1. 在 plugins/IK/config/ 目录下添加 ext.dic 和 stopword.dic 文件。重启ES。

一键部署

  1. docker-compose.yml。

  2. 启动命令:docker-compose -p es-node up -d

  3. 完整代码参看 github。https://github.com/helium-chain/ex-kibana-single-node