Mac 基于 docker 安装ElasticSearch、Kibana、Ik分词器

4.1. 部署单点 ES
  • 因为还需要部署Kibana容器,因此需要让es和kibana容器互联,这里先创建一个网络(使用compose部署可以一键互联,不需要这个步骤,但是将来有可能不需要kbiana,只需要es,所以先这里手动部署单点es)
docker network create es-net
  • 拉取镜像,这里采用的是ElasticSearch的7.12.1版本镜像
docker pull elasticsearch:7.17.6
  • 创建本机挂载目录
mkdir -p /Users//elasticsearch/plugins
mkdir -p /Users//elasticsearch/data
  • 运行docker命令,部署单点ES
docker run -d \
    --name elasticsearch \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v <自己的本地目录地址>/elasticsearch/data:/usr/share/elasticsearch/data \
    -v <自己的本地目录地址>/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
    --privileged \
    --network es-net \
    -p 9200:9200 \
    elasticsearch:7.17.6
  • 命令解释:
    • -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":配置JVM的堆内存大小,默认是1G,但是最好不要低于512M
    • -e "discovery.type=single-node":单点部署
    • -v <自己的本地目录地址>/elasticsearch/data:/usr/share/elasticsearch/data:数据卷挂载,绑定es的数据目录
    • -v <自己的本地目录地址>/elasticsearch/plugins:/usr/share/elasticsearch/plugins:数据卷挂载,绑定es的插件目录,后面可以用来修改ik分词器的配置文件。
    • ⚠️:有的版本的 ik的配置文件在/usr/share/elasticsearch/config/中
    • -privileged:授予逻辑卷访问权
    • --network es-net:让ES加入到这个网络当中
    • -p 9200:暴露的HTTP协议端口,供我们用户访问的
  • 成功启动之后,打开浏览器访问:http://localhost:9200/, 即可看到elasticsearch的响应结果

Mac 基于 docker 安装ElasticSearch、Kibana、Ik分词器_第1张图片

4.2. 部署 kibana

⚠️:对于M1的出现no matching manifest for linux/arm64/v8 in the manifest list entries。可以去 docker官网搜锁看那个版本匹配

  • 同样是先拉取镜像,注意版本需要与ES保持一致
docker pull kibana:7.17.6
  • 运行docker命令,部署kibana
docker run -d \
    --name kibana \
    -e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 \
    --network=es-net \
    -p 5601:5601 \
    kibana:7.17.6
  • 命令解释
    • --network=es-net:让kibana加入es-net这个网络,与ES在同一个网络中
    • -e ELASTICSEARCH_HOSTS=http://es:9200:设置ES的地址,因为kibana和ES在同一个网络,因此可以直接用容器名访问ES
    • -p 5601:5601:端口映射配置
  • 成功启动后,打开浏览器访问:http://localhost:5601/ ,即可以看到结果

Mac 基于 docker 安装ElasticSearch、Kibana、Ik分词器_第2张图片

4.2.1. DevTools
  • kibana中提供了一个DevTools界面,在这个界面中我们可以编写DSL来操作ElasticSearch,并且有对DSL语句的自动补全功能

Mac 基于 docker 安装ElasticSearch、Kibana、Ik分词器_第3张图片

4.3. 安装 IK分词器
  • 默认的分词对中文的支持不是很好,所以这里我们需要安装IK插件
  • 在线安装IK插件(Releases · medcl/elasticsearch-analysis-ik · GitHub)
## 进入容器内部
docker exec -it elasticsearch /bin/bash

## 在线下载并安装
./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.6/elasticsearch-analysis-ik-7.17.6.zip
#退出
exit
#重启容器
docker restart elasticsearch
  • K分词器包含两种模式
    • ik_smart:最少切分
    • ik_max_word:最细切分
  • 下面我们分别测试这两种模式
    • ik_samrt
GET /_analyze
{
  "analyzer": "ik_smart",
  "text": "青春猪头G7人马文不会梦到JK黑丝兔女郎铁驭艾许"
}
    • 结果
{
  "tokens" : [
    {
      "token" : "青春",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "猪头",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "g7",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "LETTER",
      "position" : 2
    },
    {
      "token" : "人",
      "start_offset" : 6,
      "end_offset" : 7,
      "type" : "COUNT",
      "position" : 3
    },
    {
      "token" : "马文",
      "start_offset" : 7,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 4
    },
    {
      "token" : "不会",
      "start_offset" : 9,
      "end_offset" : 11,
      "type" : "CN_WORD",
      "position" : 5
    },
    {
      "token" : "梦到",
      "start_offset" : 11,
      "end_offset" : 13,
      "type" : "CN_WORD",
      "position" : 6
    },
    {
      "token" : "jk",
      "start_offset" : 13,
      "end_offset" : 15,
      "type" : "ENGLISH",
      "position" : 7
    },
    {
      "token" : "黑",
      "start_offset" : 15,
      "end_offset" : 16,
      "type" : "CN_CHAR",
      "position" : 8
    },
    {
      "token" : "丝",
      "start_offset" : 16,
      "end_offset" : 17,
      "type" : "CN_CHAR",
      "position" : 9
    },
    {
      "token" : "兔女郎",
      "start_offset" : 17,
      "end_offset" : 20,
      "type" : "CN_WORD",
      "position" : 10
    },
    {
      "token" : "铁",
      "start_offset" : 20,
      "end_offset" : 21,
      "type" : "CN_CHAR",
      "position" : 11
    },
    {
      "token" : "驭",
      "start_offset" : 21,
      "end_offset" : 22,
      "type" : "CN_CHAR",
      "position" : 12
    },
    {
      "token" : "艾",
      "start_offset" : 22,
      "end_offset" : 23,
      "type" : "CN_CHAR",
      "position" : 13
    },
    {
      "token" : "许",
      "start_offset" : 23,
      "end_offset" : 24,
      "type" : "CN_CHAR",
      "position" : 14
    }
  ]
}
  • ik_max_word
GET /_analyze
{
    "analyzer": "ik_max_word",
    "text": "青春猪头G7人马文不会梦到JK黑丝兔女郎铁驭艾许"
}
    • 结果
{
  "tokens" : [
    {
      "token" : "青春",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "猪头",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "g7",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "LETTER",
      "position" : 2
    },
    {
      "token" : "g",
      "start_offset" : 4,
      "end_offset" : 5,
      "type" : "ENGLISH",
      "position" : 3
    },
    {
      "token" : "7",
      "start_offset" : 5,
      "end_offset" : 6,
      "type" : "ARABIC",
      "position" : 4
    },
    {
      "token" : "人马",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "CN_WORD",
      "position" : 5
    },
    {
      "token" : "人",
      "start_offset" : 6,
      "end_offset" : 7,
      "type" : "COUNT",
      "position" : 6
    },
    {
      "token" : "马文",
      "start_offset" : 7,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 7
    },
    {
      "token" : "不会",
      "start_offset" : 9,
      "end_offset" : 11,
      "type" : "CN_WORD",
      "position" : 8
    },
    {
      "token" : "梦到",
      "start_offset" : 11,
      "end_offset" : 13,
      "type" : "CN_WORD",
      "position" : 9
    },
    {
      "token" : "jk",
      "start_offset" : 13,
      "end_offset" : 15,
      "type" : "ENGLISH",
      "position" : 10
    },
    {
      "token" : "黑",
      "start_offset" : 15,
      "end_offset" : 16,
      "type" : "CN_CHAR",
      "position" : 11
    },
    {
      "token" : "丝",
      "start_offset" : 16,
      "end_offset" : 17,
      "type" : "CN_CHAR",
      "position" : 12
    },
    {
      "token" : "兔女郎",
      "start_offset" : 17,
      "end_offset" : 20,
      "type" : "CN_WORD",
      "position" : 13
    },
    {
      "token" : "女郎",
      "start_offset" : 18,
      "end_offset" : 20,
      "type" : "CN_WORD",
      "position" : 14
    },
    {
      "token" : "铁",
      "start_offset" : 20,
      "end_offset" : 21,
      "type" : "CN_CHAR",
      "position" : 15
    },
    {
      "token" : "驭",
      "start_offset" : 21,
      "end_offset" : 22,
      "type" : "CN_CHAR",
      "position" : 16
    },
    {
      "token" : "艾",
      "start_offset" : 22,
      "end_offset" : 23,
      "type" : "CN_CHAR",
      "position" : 17
    },
    {
      "token" : "许",
      "start_offset" : 23,
      "end_offset" : 24,
      "type" : "CN_CHAR",
      "position" : 18
    }
  ]
}
  • 可以看到G7人马文在最少切分时,没有被分为人马,而在最细切分时,被分为了人马,而且目前现在识别不了黑丝、铁驭、艾许等词汇,所以我们需要自己扩展词典
4.4. 扩展 IK词汇
  • 打开IK分词器的config目录
## 进入容器内部
docker exec -it elasticsearch /bin/bash

cd /usr/share/elasticsearch/config/analysis-ik
  • 找到IKAnalyzer.cfg.xml文件,并添加如下内容



	IK Analyzer 扩展配置
	
	
	 
	
	
	
	
	
  • 在IKAnalyzer.cfg.xml同级目录下新建ext.dic和stopword.dic,并编辑想要扩展的词汇内容

你可能感兴趣的:(macos,docker,elasticsearch)