Windows 部署 Elasticsearch 完整教程
以后教程参考了豆包,仅供学习参考
版本:elasticsearch-9.2.3
版本建议:ES 8.x(主流);注意:ES 需要 JDK,8.x 内置 JDK,无需单独安装。 ⚠️ Windows 不建议生产长期运行,仅开发、测试环境使用;正式环境推荐 Linux。
一、准备工作
下载地址(官方) https://www.elastic.co/cn/downloads/elasticsearch 选择:Windows 版本 ZIP 包
硬件最低要求
内存:至少 4G,ES 默认堆内存容易 OOM
关闭占用 9200 端口程序(ES 默认端口:9200 http;9300 集群通信)
二、安装步骤(绿色免安装)
解压压缩包,路径不要带中文、空格 错误示例:
D:\软件\Elasticsearch正确示例:D:\server\elasticsearch-9.2.3进入目录
config/elasticsearch.yml基础配置
# 集群名称,单机保持默认即可 cluster.name: elasticsearch # 当前节点名 node.name: node-1 # 允许外部访问,0.0.0.0=所有网卡 network.host: 0.0.0.0 # http端口 http.port: 9200 # 单机模式,避免集群报错 discovery.type: single-node # 【重要】开发环境关闭安全认证(新手强烈建议) xpack.security.enabled: false xpack.security.enrollment.enabled: false xpack.security.http.ssl.enabled: false xpack.security.transport.ssl.enabled: false
如果不关闭安全,启动后默认开启 HTTPS、账号密码,调试很麻烦。
调整 JVM 内存(解决内存不足)
文件路径:
config/jvm.options
# 默认 -Xms1g -Xmx1g
机器内存小可以改成:
-Xms512m -Xmx512m
-Xms 和 -Xmx 必须设置相同值。
三、启动 ES
CMD/PowerShell 进入
bin目录
cd D:\server\elasticsearch-9.2.3\bin elasticsearch.bat
✅ 出现 started 代表启动成功
浏览器访问测试:http://127.0.0.1:9200
返回 json 即正常。
四、常见启动报错 & 解决方案
1. 报错:max virtual memory areas vm.max_map_count [65530] is too low
2. 端口 9200 被占用
CMD
# 查询占用进程 netstat -ano | findstr "9200"
http.port:92013. 闪退、窗口一闪而过
目录存在中文 / 空格 ✅ 修改路径
JVM 内存设置过大,本机内存不足 ✅ 调低 512m
旧进程残留占用端口 ✅ 杀掉进程
4. 防火墙阻止外部访问
network.host:0.0.0.0 配置后,Windows 防火墙弹窗允许访问。五、搭配 Kibana(可视化管理)
解压,路径无中文
修改
config/kibana.yml
server.host: "0.0.0.0" elasticsearch.hosts: ["http://127.0.0.1:9200"]
启动:
bin/kibana.bat访问地址:http://127.0.0.1:5601
六、注册成 Windows 服务(后台开机自启)
管理员打开 CMD
cd D:\server\elasticsearch-9.2.3\bin elasticsearch-service.bat install
常用命令CMD
elasticsearch-service.bat start #启动 elasticsearch-service.bat stop #停止 elasticsearch-service.bat remove #卸载服务
Elasticsearch,可以在系统服务面板设置自动启动。注意:修改 yml 配置后,需要重启服务生效!
七、重要生产提醒
Windows 版本 ES 官方不作为生产环境支持,长时间运行容易内存、文件句柄问题;
不要直接公网暴露 9200 端口;如果开启安全认证务必设置强密码;
单机 single-node 仅用于测试,集群部署不要用该参数;
数据目录
data不要随意删除,删除等于清空所有索引。
八、简单测试命令
curl
# 创建索引
PUT http://127.0.0.1:9200/test_index
# 插入文档
POST http://127.0.0.1:9200/test_index/_doc
{
"title":"测试数据"
}
# 查询
GET http://127.0.0.1:9200/test_index/_search