Docker安装部署Elasticsearch+Kibana+IK分词器

Docker安装部署Elasticsearch+Kibana+IK分词器

  • Docker安装部署elasticsearch
    • 拉取镜像
    • 创建数据卷
    • 创建网络
    • elasticsearch容器,启动!
  • Docker安装部署Kibana
    • 拉取镜像
    • Kibana容器,启动!
  • 安装IK分词器
    • 安装方式一:直接从github上下载
    • 安装方式二
    • 词典扩展与停用

Docker安装部署elasticsearch

目前elastic官网推荐使用的两个版本分别是:

  • 8.10.2
  • 7.17.13

我尝试安装8.x版本的,不过似乎由于虚拟机内存大小的原因集群状态总是转为RED无法重置elastic账户的密码,因此我最终选择使用7.x版本的elasticsearch,8.x版本的默认使用https来保证数据的安全性,感兴趣的同学可以自行尝试。

由于IK分词器对于7.x版本最高只有7.17.6版本与之对应,所以下载7.17.6版本的elasticsearch

拉取镜像

docker pull elasticsearch:7.17.6

创建数据卷

一般来说,我们不希望在elasticsearch容器停止时丢失elasticsearch中的文件,因此我们创建一个数据卷来关联elasticsearch的data文件夹。在elasticsearch的使用中我们可能会安装各种插件,因此创建了另一个数据卷来关联elasticsearch的plugins文件夹

docker volume create es-data
docker volume create es-plugins

创建网络

一般来说,我们在使用elasticsearch的时候会结合kibana一起使用,为了他们能够正常关联,我们创建一个网络来连接他们

docker net create es-net

elasticsearch容器,启动!

ES_JAVA_OPTS是在设置堆大小,我修改这个环境变量主要是因为我虚拟机的内存有限,硬件允许的可以忽略

因为我是单机启动,所以将discovery.type设置为single-node

es-net为上一步我们创建的网络名

docker run \
-d \
--name es \
--net es-net \
-p 9200:9200 \
-p 9300:9300 \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v es-data:/usr/share/elasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
--privileged \
elasticsearch:7.17.6

访问9200端口,如果浏览器中出现这串json就证明elasticsearch启动成功了

{
    "name": "ab675a286e72",
    "cluster_name": "docker-cluster",
    "cluster_uuid": "ZdLfD65lQdKStAJi1yWMMQ",
    "version": {
        "number": "7.17.13",
        "build_flavor": "default",
        "build_type": "docker",
        "build_hash": "2b211dbb8bfdecaf7f5b44d356bdfe54b1050c13",
        "build_date": "2023-08-31T17:33:19.958690787Z",
        "build_snapshot": false,
        "lucene_version": "8.11.1",
        "minimum_wire_compatibility_version": "6.8.0",
        "minimum_index_compatibility_version": "6.0.0-beta1"
    },
    "tagline": "You Know, for Search"
}

Docker安装部署Kibana

Kibana 是为 Elasticsearch设计的开源分析和可视化平台

拉取镜像

docker pull kibana:7.17.6

Kibana容器,启动!

ELASTICSEARCH_HOSTS环境变量为elasticsearch服务的地址,其中http://es:9200中的es是我们运行elasticsearch容器时起的别名

es-net为我们在之前创建的网络的名称

docker run \
-d \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--name kibana \
--net es-net \
-p 5601:5601 \
kibana:7.17.6

Kibana的启动比较慢,一段时间以后访问5601端口如果能正常进入控制台界面则证明Kibana部署成功

安装IK分词器

elasticsearch默认的分词器对于中文分词不友好

标准分词器分词:

POST /_analyze
{
  "text": "elasticsearch 8.x版本太难啦!"
  , "analyzer": "standard"
}
{
  "tokens" : [
    {
      "token" : "elasticsearch",
      "start_offset" : 0,
      "end_offset" : 13,
      "type" : "",
      "position" : 0
    },
    {
      "token" : "8",
      "start_offset" : 14,
      "end_offset" : 15,
      "type" : "",
      "position" : 1
    },
    {
      "token" : "x",
      "start_offset" : 16,
      "end_offset" : 17,
      "type" : "",
      "position" : 2
    },
    {
      "token" : "版",
      "start_offset" : 17,
      "end_offset" : 18,
      "type" : "",
      "position" : 3
    },
    {
      "token" : "本",
      "start_offset" : 18,
      "end_offset" : 19,
      "type" : "",
      "position" : 4
    },
    {
      "token" : "太",
      "start_offset" : 19,
      "end_offset" : 20,
      "type" : "",
      "position" : 5
    },
    {
      "token" : "难",
      "start_offset" : 20,
      "end_offset" : 21,
      "type" : "",
      "position" : 6
    },
    {
      "token" : "啦",
      "start_offset" : 21,
      "end_offset" : 22,
      "type" : "",
      "position" : 7
    }
  ]
}

可以看到默认分词器对英文分词效果还不错,但对于中文分词不太友好。

我们再来实施ik分词器

POST /_analyze
{
  "text": "elasticsearch 8.x版本太难啦!"
  , "analyzer": "ik_smart"
}
{
  "tokens" : [
    {
      "token" : "elasticsearch",
      "start_offset" : 0,
      "end_offset" : 13,
      "type" : "ENGLISH",
      "position" : 0
    },
    {
      "token" : "8.x",
      "start_offset" : 14,
      "end_offset" : 17,
      "type" : "LETTER",
      "position" : 1
    },
    {
      "token" : "版本",
      "start_offset" : 17,
      "end_offset" : 19,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "太难",
      "start_offset" : 19,
      "end_offset" : 21,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "啦",
      "start_offset" : 21,
      "end_offset" : 22,
      "type" : "CN_CHAR",
      "position" : 4
    }
  ]
}

可以看到ik分词器对与中文分词十分友好。接下来我们就安装ik分词器

安装方式一:直接从github上下载

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.6/elasticsearch-analysis-ik-7.17.6.zip

安装方式二

之前我们将es-plugins数据卷挂载到了es容器内的plugins文件夹。

我们先使用魔法从github上下载

https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.6/elasticsearch-analysis-ik-7.17.6.zip

然后将压缩包解压到数据卷对应的位置,然后重启elasticsearch容器即可。

词典扩展与停用

  • 创建ext.dit文件添加扩展词
  • 创建stopword.dic文件停用词

你可能感兴趣的:(docker,elasticsearch,后端,容器)