docker搭建Elasticsearch-ik中文分词器-安装Kibana可视化工具

  |  

前言

Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—​ 无论是开源还是私有。

但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。

Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。

然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:

一个分布式的实时文档存储,每个字段 可以被索引与搜索
一个分布式实时分析搜索引擎
能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
Elasticsearch 将所有的功能打包成一个单独的服务,这样你可以通过程序与它提供的简单的 RESTful API 进行通信, 可以使用自己喜欢的编程语言充当 web 客户端,甚至可以使用命令行(去充当这个客户端)。

就 Elasticsearch 而言,起步很简单。对于初学者来说,它预设了一些适当的默认值,并隐藏了复杂的搜索理论知识。 它 开箱即用 。只需最少的理解,你很快就能具有生产力。

文档

Elasticsearch 中文文档
Elasticsearch 英文文档
nestjs 使用 Elasticsearch 文档
elastic 介绍

安装 Elasticsearch 的镜像用 7.9.0

docker pull elasticsearch:7.9.0

运行

1
2
3
4
5
6
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
-e "discovery.type=single-node" \
-d --name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:7.9.0

可以增加文件映射

1
2
-v /data/docker/elastic/plugins:/usr/share/elasticsearch/plugins \
-v /data/docker/elastic/data:/usr/share/elasticsearch/data \

-p 指定容器暴露的端口
9200 作为 Http 协议,主要用于外部通讯;
9300 指定容器暴露的端口

在浏览器访问 http://你的服务器 ip:9200 如下 说明启动成功

在这里插入图片描述

安装 ik 分词器我也是用 7.9.0 版本的

下载地址https://github.com/medcl/elasticsearch-analysis-ik/releases
找到 7.9.0 版本 并且下载下来放到服务器上

进入 es 的容器里

docker exec -it elasticsearch /bin/bash

在这里插入图片描述

在 plugins 目录下创建 ik 文件夹:
mkdir /usr/share/elasticsearch/plugins/ik

退出容器:exit

拷贝下载好的 ik 分词器压缩包到 ik 文件夹中:

docker cp elasticsearch-analysis-ik-7.9.0.zip elasticsearch:/usr/share/elasticsearch/plugins/ik/

再进入容器:
docker exec -it elasticsearch /bin/bash

进入 IK 文件夹下
cd plugins/ik/

解压文件
unzip elasticsearch-analysis-ik-7.9.0.zip

退出容器 重启
docker restart elasticsearch

查看 ik 分词器是否安装成功 可已经进去 es 容器里的 bin 目录下

elasticsearch-plugin list

在这里插入图片描述

修改配置,解决跨域访问问题

首先进入到容器中,然后进入到指定目录修改 elasticsearch.yml 文件。
docker exec -it elasticsearch
vi elasticsearch.yml
在 elasticsearch.yml 的文件末尾加上:
http.cors.enabled: true
http.cors.allow-origin: "\*"
修改配置后重启容器即可。
docker restart elasticsearch

Kibana 7 可视化工具

docker pull kibana:7.9.0

docker run -d -p 5601:5601 --name kibana --link elasticsearch7.9.0:elasticsearch7.9.0 docker.io/kibana:7.9.0

  1. 如果报错 kibana报错Unable to revive connection: http://172.16.23.126:9200/

docker inspect elasticsearch 查看 ES 容器暴露出来的 ip

在这里插入图片描述

查询配置文件
find / -name kibana.yml

写入对应 ip
在这里插入图片描述

重启
docker restart kibana

  1. kibana 启动报 server is not ready yet https://www.jianshu.com/p/a698eddb6cec

kibana 对应的索引已经在 es 中创建 需要 删除对应索引

在这里插入图片描述

  1. 查看内存 free -h 启动失败还有可能是内存不够

查看索引
curl localhost:9200/_cat/indices?v
删除索引,通配符形式
curl -XDELETE localhost:9200/索引*
索引起别名
curl -XPUT localhost:9200/索引/_alias/别名
查看别名
curl -XPUT localhost:9200/_cat/aliases?v

  1. 还可以指定端口启动
    docker run -d -p 5601:5601 --name kibana -e ELASTICSEARCH_HOSTS=http://172.17.0.3:9200 docker.io/kibana:7.9.0

启动特别慢 要等久点

其他问题

  1. 运行一段时间 访问 Kibana 显示 Data too large 问题

解决
使用 potman 发送请求
put https://127.0.0.1:9200/_cluster/settings (参数格式 application/json)

1
2
3
4
5
{
"persistent" : {
"indices.breaker.fielddata.limit" : "40%"
}
}