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

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

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

拉取镜像

bash 复制代码
docker pull elasticsearch:7.17.6

创建数据卷

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

bash 复制代码
docker volume create es-data
docker volume create es-plugins

创建网络

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

bash 复制代码
docker net create es-net

elasticsearch容器,启动!

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

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

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

bash 复制代码
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启动成功了

json 复制代码
{
    "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设计的开源分析和可视化平台

拉取镜像

bash 复制代码
docker pull kibana:7.17.6

Kibana容器,启动!

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

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

bash 复制代码
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"
}
json 复制代码
{
  "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"
}
json 复制代码
{
  "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上下载

bash 复制代码
./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文件停用词
相关推荐
monkey_meng11 分钟前
【Rust类型驱动开发 Type Driven Development】
开发语言·后端·rust
想学习java初学者13 分钟前
Docker compose部署elasticsearch(单机版)
运维·docker·容器
落落落sss20 分钟前
MQ集群
java·服务器·开发语言·后端·elasticsearch·adb·ruby
大鲤余1 小时前
Rust,删除cargo安装的可执行文件
开发语言·后端·rust
她说彩礼65万1 小时前
Asp.NET Core Mvc中一个视图怎么设置多个强数据类型
后端·asp.net·mvc
河岸飞流1 小时前
Centos安装Elasticsearch教程
elasticsearch·centos
陈随易1 小时前
农村程序员-关于小孩教育的思考
前端·后端·程序员
_江南一点雨1 小时前
SpringBoot 3.3.5 试用CRaC,启动速度提升3到10倍
java·spring boot·后端
转转技术团队1 小时前
空间换时间-将查询数据性能提升100倍的计数系统实践
java·后端·架构
酸奶代码2 小时前
Spring AOP技术
java·后端·spring