文章目录
1 前言
在当今数据驱动的时代,高效、灵活的全文本搜索与大数据分析能力已成为众多应用的核心需求。Elasticsearch作为基于Lucene构建的开源分布式搜索引擎,尤其擅长处理海量非结构化数据,支持近实时检索与复杂分析,广泛应用于日志处理、企业搜索和实时监控等场景。与传统数据库相比,它在全文检索和横向扩展方面优势显著,但不适用于强一致性事务场景。值得强调的是,利用Docker部署Elasticsearch已成为高效管理其运行环境的主流方式------通过容器化技术,我们能够快速构建一致、隔离且易于扩展的ES集群,大幅简化配置和依赖管理流程。配合IK中文分词插件,更可精准处理中文文本。本文将以Docker为核心工具,详细介绍如何快速部署Elasticsearch 8.17及相关组件,并演示基础配置与分词功能的实际应用。
2 测试环境
- docker 24
- elasticsearch 8.17
- kibana: 8.17
3 实现步骤
docker-compose 配置
新建一个docker-compose.yml文件,填入以下内容。该配置文件定义了两个服务:Elasticsearch 和 Kibana。通过环境变量设置安全认证参数,挂载数据卷以实现数据持久化,并配置了内存限制与端口映射,确保服务间可互通且资源使用受控。
yml
#version: '3.7'
services:
elasticsearch:
image: elasticsearch:8.17.4
container_name: es01
privileged: true
volumes:
- ./volumes/elasticsearch/data:/usr/share/elasticsearch/data
- ./volumes/elasticsearch/plugins:/usr/share/elasticsearch/plugins
ports:
- "9200:9200"
- "9300:9300"
mem_limit: 1g
environment:
- discovery.type=single-node
- xpack.security.enabled=true
- ELASTIC_PASSWORD=your_password_1
kibana:
image: kibana:8.17.4
container_name: kibana01
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- ELASTICSEARCH_USERNAME=kibana_user
- ELASTICSEARCH_PASSWORD=your_password_2
ports:
- "5601:5601"
depends_on:
- elasticsearch
创建新账号(for kibaba)
为增强安全性,建议为Kibana服务创建专用用户,避免直接使用Elasticsearch内置的elastic超级用户。以下命令用于在Elasticsearch容器中创建新用户并配置相应权限。
新建账号:
bash
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-users useradd kibana_user
配置密码: your_password_2
给新账号授权:
bash
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-users roles -a superuser kibana_user
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-users roles -a kibana_system kibana_user
ik分词插件
IK分词器是针对中文文本处理的重要插件,支持智能分词和最大分词等多种模式。安装该插件后,Elasticsearch能够更准确地理解和处理中文内容。
安装插件:
bash
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-plugin install https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-8.17.4.zip
配置volumes目录权限
为确保容器内Elasticsearch进程有足够的权限读写挂载目录,需对本地数据卷目录进行权限设置。
bash
chmod -R 777 .volumes
4 测试
完成部署与配置后,需验证Elasticsearch、Kibana及IK分词器是否正常工作。可通过浏览器访问对应端口,或使用curl命令测试服务连通性。
浏览器访问
- elasticsearch:
http://your_ip:9200/
- kibana:
http://your_ip:5601/
使用前面的 kibana_user 账号登录
curl访问
bash
curl -u elastic:your_password_1 http://your_ip:9200
分词器测试
在Kibana的Dev Tools界面中,可对IK分词器的两种模式进行测试。ik_smart模式进行最粗粒度切分,适合精确查询场景;ik_max_word则进行最细粒度切分,适用于高召回需求。
在devtools下进行测试: http://your_ip:5601/app/dev_tools#/console/shell
ik_smart:
json
GET /_analyze
{
"tokenizer":"ik_smart",
"text":"中华人民共和国"
}
效果如下:
ik_max_word:
json
GET /_analyze
{
"tokenizer":"ik_max_word",
"text":"中华人民共和国"
}
效果如下:
索引管理
Kibana 提供了完善的索引管理功能,在绝大多数场景下已经完全有能力取代 Elasticsearch Head 插件,并且是 Elastic 官方推荐的做法。通过Kibana界面,用户可以直观地查看索引状态、执行映射管理及进行索引生命周期操作。索引管理界面参见:
http://your_ip:5601/app/management/data/index_management/indices
效果如下:
5 参考资料
https://www.elastic.co/docs/deploy-manage/deploy/self-managed/install-elasticsearch-docker-basic
https://elastic.ac.cn/guide/en/elasticsearch/reference/current/docker.html
https://hub.docker.com/_/elasticsearch/
Docker安装Elasticsearch、ik分词器、可视化工具 7.7.0
analysis-ik插件 release note
ik插件下载地址列表
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/index-mgmt.html