Elasticsearch 安装与配置
概述
本文档详细介绍如何使用 Docker 安装 Elasticsearch,并配置 IK 中文分词插件。特别需要注意的是,分词插件版本必须与 Elasticsearch 版本完全一致,否则会导致兼容性问题。
版本兼容性说明
⚠️ 重要提醒:分词插件版本必须与 Elasticsearch 版本完全一致!
- Elasticsearch 8.15.0 → IK 插件 8.15.0
- Elasticsearch 7.17.0 → IK 插件 7.17.0
版本不匹配会导致以下问题:
- 插件加载失败
- Elasticsearch 启动异常
- 分词功能无法正常工作
Docker 安装方式
方式一:直接运行官方镜像(不含插件)
bash
# 拉取官方镜像
docker pull elasticsearch:7.17.7
# 运行容器
docker run -d \
--name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \
elasticsearch:7.17.7
方式二:使用自定义 Dockerfile(推荐)
使用自定义 Dockerfile 可以在构建镜像时自动安装 IK 分词插件,确保版本完全匹配。
环境配置
系统要求
- Docker 20.10+
- 内存:至少 2GB
- 磁盘空间:至少 10GB
创建数据目录
bash
# 创建数据和配置目录
mkdir -p /opt/elasticsearch/data
mkdir -p /opt/elasticsearch/config
mkdir -p /opt/elasticsearch/logs
# 设置权限(ES 运行用户 UID 1000)
chown -R 1000:1000 /opt/elasticsearch/
chmod 755 /opt/elasticsearch/data
Docker Compose 配置
创建 docker-compose.yml
文件:
yaml
version: '3.8'
services:
elasticsearch:
build: .
container_name: elasticsearch
environment:
- node.name=es-node-1
- cluster.name=es-cluster
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
- xpack.security.enabled=false
- xpack.security.enrollment.enabled=false
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- /opt/elasticsearch/data:/usr/share/elasticsearch/data
- /opt/elasticsearch/logs:/usr/share/elasticsearch/logs
ports:
- "9200:9200"
- "9300:9300"
networks:
- elastic
networks:
elastic:
driver: bridge
验证安装
1. 检查 Elasticsearch 状态
bash
# 检查集群状态
curl -X GET "localhost:9200/_cluster/health?pretty"
# 检查节点信息
curl -X GET "localhost:9200/_nodes?pretty"
2. 验证 IK 插件
bash
# 查看已安装的插件
curl -X GET "localhost:9200/_cat/plugins?v"
# 测试 IK 分词器
curl -X POST "localhost:9200/_analyze?pretty" -H 'Content-Type: application/json' -d'
{
"analyzer": "ik_max_word",
"text": "中华人民共和国国歌"
}'
3. 期望输出
IK 插件正常工作时,分词结果应类似:
json
{
"tokens": [
{"token": "中华人民共和国", "start_offset": 0, "end_offset": 7},
{"token": "中华人民", "start_offset": 0, "end_offset": 4},
{"token": "中华", "start_offset": 0, "end_offset": 2},
{"token": "华人", "start_offset": 1, "end_offset": 3},
{"token": "人民共和国", "start_offset": 2, "end_offset": 7},
{"token": "人民", "start_offset": 2, "end_offset": 4},
{"token": "共和国", "start_offset": 4, "end_offset": 7},
{"token": "共和", "start_offset": 4, "end_offset": 6},
{"token": "国", "start_offset": 6, "end_offset": 7},
{"token": "国歌", "start_offset": 7, "end_offset": 9}
]
}
常见问题
1. 内存不足
bash
# 调整 JVM 堆内存
-e "ES_JAVA_OPTS=-Xms2g -Xmx2g"
2. 权限问题
bash
# 确保数据目录权限正确
sudo chown -R 1000:1000 /opt/elasticsearch/
3. 插件版本不匹配
- 检查 Elasticsearch 版本:
curl localhost:9200
- 确保下载对应版本的 IK 插件
- 重新构建 Docker 镜像
Dockerfile
dockerfile
FROM elasticsearch:7.17.7
# 维护者信息
LABEL maintainer="your-email@example.com"
# 设置工作目录
WORKDIR /usr/share/elasticsearch
# 下载并安装 IK 分词插件
RUN elasticsearch-plugin install --batch https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-7.17.7.zip
# 验证插件安装
RUN elasticsearch-plugin list
# 暴露端口
EXPOSE 9200 9300
# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \
CMD curl -f http://localhost:9200/_cluster/health || exit 1
注意
编写文章时,release.infinilabs.com 证书过期,请根据实际情况更换下载地址。
Docker 运行命令
构建镜像
bash
# 构建自定义镜像
docker build -t elasticsearch-ik:7.17.7 .
单独运行
bash
# 运行容器
docker run -d \
--name elasticsearch \
--restart=unless-stopped \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \
-e "xpack.security.enabled=false" \
-e "bootstrap.memory_lock=true" \
--ulimit memlock=-1:-1 \
-v /opt/elasticsearch/data:/usr/share/elasticsearch/data \
-v /opt/elasticsearch/logs:/usr/share/elasticsearch/logs \
elasticsearch-ik:7.17.7
使用 Docker Compose
bash
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f elasticsearch
# 停止服务
docker-compose down
生产环境命令
bash
# 生产环境推荐配置
docker run -d \
--name elasticsearch-prod \
--restart=always \
--network=host \
-e "cluster.name=prod-cluster" \
-e "node.name=es-node-1" \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms4g -Xmx4g" \
-e "xpack.security.enabled=true" \
-e "bootstrap.memory_lock=true" \
-e "indices.query.bool.max_clause_count=10240" \
--ulimit memlock=-1:-1 \
--ulimit nofile=65536:65536 \
-v /opt/elasticsearch/data:/usr/share/elasticsearch/data \
-v /opt/elasticsearch/logs:/usr/share/elasticsearch/logs \
-v /opt/elasticsearch/config:/usr/share/elasticsearch/config \
elasticsearch-ik:7.17.7
总结
通过以上步骤,您可以成功部署带有 IK 中文分词插件的 Elasticsearch 集群。记住关键点:
- 版本严格匹配:插件版本必须与 ES 版本完全一致
- 权限设置:确保数据目录权限正确(UID 1000)
- 内存配置:根据实际需求调整 JVM 堆内存
- 健康监控:定期检查集群状态和插件功能
如有问题,请检查容器日志:docker logs elasticsearch