Docker安装部署Elasticsearch+Kibana+IK分词器-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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

Docker安装部署elasticsearch

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

  • 8.10.2
  • 7.17.13

我尝试安装8.x版本的不过似乎由于虚拟机内存大小的原因集群状态总是转为RED无法重置elastic账户的密码因此我最终选择使用7.x版本的elasticsearch8.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" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "8",
      "start_offset" : 14,
      "end_offset" : 15,
      "type" : "<NUM>",
      "position" : 1
    },
    {
      "token" : "x",
      "start_offset" : 16,
      "end_offset" : 17,
      "type" : "<ALPHANUM>",
      "position" : 2
    },
    {
      "token" : "版",
      "start_offset" : 17,
      "end_offset" : 18,
      "type" : "<IDEOGRAPHIC>",
      "position" : 3
    },
    {
      "token" : "本",
      "start_offset" : 18,
      "end_offset" : 19,
      "type" : "<IDEOGRAPHIC>",
      "position" : 4
    },
    {
      "token" : "太",
      "start_offset" : 19,
      "end_offset" : 20,
      "type" : "<IDEOGRAPHIC>",
      "position" : 5
    },
    {
      "token" : "难",
      "start_offset" : 20,
      "end_offset" : 21,
      "type" : "<IDEOGRAPHIC>",
      "position" : 6
    },
    {
      "token" : "啦",
      "start_offset" : 21,
      "end_offset" : 22,
      "type" : "<IDEOGRAPHIC>",
      "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文件停用词
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Docker