【ES】Elasticsearch的安装与使用
2026-02-24
中间件
00
请注意,本文编写于 47 天前,最后修改于 45 天前,其中某些信息可能已经过时。

目录

1、docker-compose安装ES
1.1、拉镜像
1.2、docker-compose配置文件
1.3、启动
1.4、配置kibana
2、使用kibana
3、SpringBoot引入es并使用

最近要实现个简单的IM系统,打算用ES做全文检索以及历史消息存储,复习下ES的安装以及使用。

1、docker-compose安装ES

1.1、拉镜像

因为网络问题,官网镜像拉不到,找个合适版本的镜像并安装。

网址:https://docker.aityp.com/r/docker.io/library/elasticsearch

拉ES镜像:

展开代码
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/elasticsearch:8.19.5 docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/elasticsearch:8.19.5 elasticsearch:8.19.5

拉Kibana镜像

展开代码
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/kibana:8.19.5 docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/kibana:8.19.5 kibana:8.19.5

下载ik分词器的插件包(ik分词器处理中文全文检索效果最好)并解压好

https://release.infinilabs.com/analysis-ik/stable/

1.2、docker-compose配置文件

先修改配置文件

展开代码
echo "vm.max_map_count=262144" >> /etc/sysctl.conf sysctl -p

找个目录创建docker-compose.yml、es-logs、es-data、kibana-config

展开代码
version: '3.8' services: elasticsearch: # 构建自定义镜像(代替直接拉取官方镜像) build: . # 表示使用当前目录的 Dockerfile 构建 container_name: es8 restart: always ports: - "9200:9200" - "9300:9300" environment: - discovery.type=single-node - cluster.name=es-cluster #开启权限验证 - xpack.security.enabled=true - xpack.security.http.ssl.enabled=false - ES_JAVA_OPTS=-Xms512m -Xmx512m volumes: - ./es-data:/usr/share/elasticsearch/data - ./es-logs:/usr/share/elasticsearch/logs networks: - es-network # 可选:同时启动 Kibana(版本和 ES 一致) kibana: # Kibana 版本必须和 ES 完全一致! image: kibana:8.19.5 container_name: kibana8 restart: always # 端口映射:5601 是 Kibana 默认端口 ports: - "5601:5601" environment: # 配置 ES 地址(关键:填 ES 容器名/宿主机IP) - ELASTICSEARCH_HOSTS=http://es8:9200 # 若 ES 容器名不是 es8,改为实际名称;也可填宿主机IP:http://192.168.1.100:9200 # 中文界面(可选) - I18N_LOCALE=zh-CN # 优化响应超时(避免ES查询慢导致Kibana超时) - ELASTICSEARCH_REQUEST_TIMEOUT=30000 # 挂载配置文件(可选,如需自定义更多配置) volumes: - ./kibana-config:/usr/share/kibana/config # 加入 ES 所在的自定义网络(关键:保证容器互通) networks: - es-network # 这个网络名要和 ES 的 docker-compose 中的网络名一致 networks: es-network: driver: bridge ipam: config: - subnet: 172.16.0.0/16 gateway: 172.16.0.1 volumes: es-data: es-logs:

要注意的点是自定义网络那里,不要和内网已有网段冲突了。

kibana-config目录创建好kibana配置文件kibana.yml

展开代码
server.port: 5601 server.host: "0.0.0.0" # 允许外部访问 elasticsearch.hosts: ["http://es8:9200"] # ES地址 #i18n.locale: "zh-CN" # 中文界面 elasticsearch.requestTimeout: 30000 elasticsearch.username: kibana_system elasticsearch.password: 123456 # 加密密钥(解决加密报错,必须配置) xpack.encryptedSavedObjects.encryptionKey: "abcdefghijklmnopqrstuvwxyz1234567890abcd"

根目录创建好DockerFile,用于自定义容器

展开代码
FROM elasticsearch:8.19.5 COPY ik /usr/share/elasticsearch/plugins/analysis-ik # 验证是否复制成功 RUN ls -la /usr/share/elasticsearch/plugins/analysis-ik/ # 暴露端口(和基础镜像一致) EXPOSE 9200 9300 # 启动命令(和基础镜像一致) CMD ["elasticsearch"]

最终目录结构如下:

image.png

1.3、启动

启动 docker compose up -d

停止 docker compose stop

重启 docker compose restart

查看 ES 日志 docker compose logs -f elasticsearch

删除 ES 容器(保留数据卷) docker compose down

删除容器 + 数据卷(谨慎操作,数据会丢失) docker compose down -v

启动后执行 curl http://localhost:9200 如果打印如下内容则成功:

展开代码
{ "name" : "es-node-1", "cluster_name" : "es-cluster", "cluster_uuid" : "e4dBYZOXSvOWi_KOJ_s4iw", "version" : { "number" : "8.13.4", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "da95df118650b55a500dcc181889ac35c6d8da7c", "build_date" : "2024-05-06T22:04:45.107454559Z", "build_snapshot" : false, "lucene_version" : "9.10.0", "minimum_wire_compatibility_version" : "7.17.0", "minimum_index_compatibility_version" : "7.0.0" }, "tagline" : "You Know, for Search" }

1.4、配置kibana

进入es容器创建用户,先给默认用户添加密码,这个后续登录用:

展开代码
docker exec -it es8 bash ./bin/elasticsearch-reset-password -u elastic -i

kibana默认配置的不能用默认用户,所以创建个新用户给kibana用

展开代码
docker exec -it es8 bash ./bin/elasticsearch-reset-password -u kibana_system -i

重启kibana容器即可

2、使用kibana

Kibana 是ELK 技术栈里的可视化工具,专门用来和 Elasticsearch 配合,做日志、指标、数据的查询、展示、分析、监控。访问http://localhost:5601 即可使用kibanna。

先确定几个概念:

  • 索引:类似于mysql表的概念,所有的操作都是基于索引做的
  • 文档:就是数据,每个索引对应映射的实体数据
  • 映射:字段定义,类似mysql的字段

进入kibana界面创建索引

image.png

创建好之后,进行相关映射的配置,可以使用控制台更方便。

image.png

image.png

例如我的消息的表创建索引命令为;

展开代码
PUT /im_message/_mapping?pretty { "properties": { "sender_code": { "type": "keyword" }, "receiver_code": { "type": "keyword" }, "content": { "type": "text", "analyzer": "ik_max_word" }, "message_time": { "type": "date", "format": "yyyy-MM-dd HH:mm:ss" }, "read_status": { "type": "integer" }, "code": { "type": "keyword" } } }

3、SpringBoot引入es并使用

本文作者:刘涛

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!