Windows 本地安装 Elasticsearch 8.10.0 与 IK 分词器:6 个坑与最终解决办法
📅 更新日期:2026-07-17
前言:为什么装 ES?
我正在做的项目 PaiSmart (派聪明)是一个企业级 RAG 知识管理平台,检索层依赖 Elasticsearch 做向量+全文混合搜索。项目要求 ES 8.10.x 版本(与 Spring Boot 的 spring-data-elasticsearch 客户端兼容),所以不能直接用最新版。
本文完整记录了我在 Windows 本机 从零安装 Elasticsearch 8.10.0 + IK 中文分词器过程中遇到的 6 个坑,每个坑都附上了当时的报错截图和最终解决办法。如果你也是 Windows 环境、第一次装 ES 8.x,这篇文章应该能帮你省掉不少折腾时间。
环境信息
- 操作系统:Windows(CMD + PowerShell 混用)
- ES 版本:Elasticsearch 8.10.0
- IK 分词器:analysis-ik 8.10.0
- 安装目录:
D:\Workspace\TechResources\ES\elasticsearch-8.10.0
坑 1:照着教程敲命令,Linux 语法在 CMD 里直接炸
报错截图
很多 ES 教程默认是 Linux 环境写的,启动命令长这样:

教程里写的是:
bash
ES_JAVA_OPTS="-Xms5g -Xmx5g" ./bin/elasticsearch
我直接复制到 CMD 里执行,结果------
错误现象
- 第一层错误 :
ES_JAVA_OPTS="-Xms5g -Xmx5g"这句在 CMD 里根本不认,Windows CMD 不支持这种KEY=VALUE前缀赋值方式。 - 第二层错误 :
./bin/elasticsearch是 Linux 路径格式,Windows 下找不到这个文件。
原因分析
| 写法 | Linux | Windows |
|---|---|---|
| 环境变量 | KEY="value" cmd |
set "KEY=value" && cmd |
| 可执行文件 | ./bin/elasticsearch |
elasticsearch.bat(或 .bat 后缀) |
另外教程里给的是 -Xms5g -Xmx5g(5GB 内存),我的机器没这么大内存空间,即使语法对了也会 OOM。
最终解决办法
cmd
set "ES_JAVA_OPTS=-Xms512m -Xmx512m" && elasticsearch.bat
要点:
- 用
set "KEY=value"设置环境变量(注意引号包裹整个赋值表达式,避免空格截断) - 内存改成 512m 就够了,本地开发不需要几个 G
- 启动文件是
elasticsearch.bat(不是./bin/elasticsearch)
坑 2:curl 连不上 ES------端口被 Cpolar 内网穿透占了
报错截图
ES 启动成功后(控制台输出 started),我用 curl 验证连通性:

命令:
cmd
curl --cacert config/certs/http_ca.crt -X GET "https://localhost:9200" -u elastic
报错:
curl: (35) schannel: next InitializeSecurityContext failed:
SEC_E_INVALID_TOKEN (0x80090308) -- 给函数提供的标志无效
输入密码后还是同样报错。
原因分析
这里其实有 两个问题叠加:
- 端口错了 。我的电脑上 9200 端口被 Cpolar 内网穿透工具占用 了!ES 启动时检测到 9200 被占,自动切换到了 9201 端口。
- 所以
localhost:9200连的根本不是 ES,而是 Cpolar 的服务。Cpolar 返回的响应触发了 Windows curl 的 SSL 校验异常(SEC_E_INVALID_TOKEN)。
最终解决办法
把端口改为 9201:
cmd
curl --cacert config/certs/http_ca.crt -X GET "https://localhost:9201" -u elastic
如何确认 ES 实际端口? 看 ES 启动日志里会输出类似:
[INFO ][o.e.n.Node ] [FONZO] started [INFO ][o.e.h.AbstractTransport ] publish_address {127.0.0.1:9301} [INFO ][o.e.h.n.Netty4HttpServerTransport ] publish_address {127.0.0.1:9201}
坑 3:SSL 证书 CRL 吊销检查导致连接失败
报错截图
改完端口和绝对路径后,又遇到新的 SSL 错误:

先执行的命令(加了绝对路径、改了端口,但没加 -k):
cmd
curl --cacert "D:\Workspace\TechResources\ES\elasticsearch-8.10.0\config\certs\http_ca.crt"
-X GET "https://localhost:9201" -u elastic:b5lW6nRGwwugZTnUddik
报错:
curl: (60) schannel: the revocation status of the server is unknown
More details here: https://curl.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it.
原因分析
这是 Windows 自带 curl(使用 Schannel/WinTLS)的一个经典行为:
- Windows curl 默认会检查服务器 SSL 证书的 CRL(证书吊销列表)状态
- ES 自签发的 CA 证书没有在线 CRL 分发点,所以校验失败
- 这个行为跟 Linux 下的 curl(OpenSSL)不一样,Linux 默认不查 CRL
最终解决办法
加 -k 参数跳过证书验证(本地开发环境完全可以接受):
cmd
curl -k --cacert "D:\Workspace\TechResources\ES\elasticsearch-8.10.0\config\certs\http_ca.crt"
-X GET "https://localhost:9201" -u elastic:b5lW6nRGwwugZTnUddik
加上 -k 之后立刻返回了正确的 JSON 响应(如上图下半部分所示),包含 cluster_name: FONZO、version.number: 8.10.0 等信息,说明 ES 已经完全正常运行。
坑 4:PowerShell 里 .bat 文件必须加 .\ 前缀
报错截图
接下来安装 IK 中文分词器。官方文档给了两种安装方式,我选了命令行方式:

在 PowerShell 中执行:
powershell
cd D:\Workspace\TechResources\ES\elasticsearch-8.10.0\bin
elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.10.0
报错:
The term 'elasticsearch-plugin' is not recognized as a name of a cmdlet,
function, script file, or operable program.
Check the spelling of the name, or if a path was included,
verify that the path is correct and try again.
PowerShell 还贴心地提示了:
If you trust this command, run the following command instead:
.\elasticsearch-plugin
原因分析
PowerShell 的安全机制与 CMD 不同:
| 行为 | CMD | PowerShell |
|---|---|---|
| 当前目录可执行文件 | 自动查找 | 不自动查找 (需显式加 ./ 或 .\) |
| 安全策略 | 无限制 | ExecutionPolicy 控制 |
PowerShell 为了防止当前目录下有恶意同名程序被执行,故意不在 PATH 中包含 .(当前目录)。所以直接输 elasticsearch-plugin 会找不到。
最终解决办法
加上 .\ 前缀:
powershell
.\elasticsearch-plugin.bat install https://get.infini.cloud/elasticsearch/analysis-ik/8.10.0
IK 插件会自动下载并安装到 plugins/analysis-ik/ 目录下。
坑 5:装完插件后验证失败------ES 根本没在跑
报错截图
IK 插件安装完成后,我想验证是否加载成功。参考教程里的命令(注意:教程用的是 HTTP + 默认端口 9200):

我把教程的命令改成了自己的配置(HTTPS + 9201 + 认证),结果连不上:

原因分析
安装 IK 插件的过程中,ES 进程可能已经停掉了 (或者之前启动的窗口被关了)。插件安装只是往 plugins/ 目录放文件,不会自动重启 ES。而插件只有在 ES 启动时才会加载 ,所以不重启 ES 去查 _cat/plugins 自然什么都看不到。
最终解决办法
重新启动 ES:
cmd
set "ES_JAVA_OPTS=-Xms512m -Xmx512m" && elasticsearch.bat
等控制台输出 started 后再执行验证命令。
坑 6:PowerShell 把 curl 当成了 Invoke-WebRequest 别名
报错截图
ES 重启后,我在 PowerShell 里执行验证 IK 插件的命令:

命令:
powershell
curl -k -u elastic:b5lW6nRGwwugZTnUddik -X GET "https://localhost:9201/_cat/plugins?v"
报错(红字一大片):
Invoke-WebRequest : 无法处理参数,因为参数名称"u"具有二义性。
可能的匹配项包括:-UseBasicParsing -Uri -UseDefaultCredential als -UserAgent
所在位置 行:1 字符: 9
+ curl -k -u ...
+ ~~
+ CategoryInfo : InvalidArgument: (:)
+ FullyQualifiedErrorId : AmbiguousParameter,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
原因分析
这是 Windows PowerShell 最让人头疼的"贴心功能"之一:
- PowerShell 为了让习惯用
curl的用户无缝过渡,内置了一个 别名(alias) :curl → Invoke-WebRequest(PowerShell 自己实现的 HTTP 客户端)
- 但
Invoke-WebRequest的参数名跟真正的curl.exe完全不同 :- curl 的
-u(用户名密码)→ 对应的是-Credential - curl 的
-k→ 对应的是-SkipCertificateCheck(PS 7+) - curl 的
-X GET→ 对应的是-Method Get
- curl 的
- 所以当你传
-u时,PowerShell 不知道你指的是哪个参数,就报了「具有二义性」
最终解决办法
用 curl.exe 强制调用真正的 curl 可执行文件,绕过 PowerShell 别名:
powershell
curl.exe -k -u elastic:b5lW6nRGwwugZTnUddik -X GET "https://localhost:9201/_cat/plugins?v"
✅ 成功验证:全部搞定!
ES 启动成功

这里因为字符编码问题有点乱码
启动成功后控制台输出的关键信息:
| 信息项 | 值 |
|---|---|
| elastic 密码 | b5lxxxxxxxxxxddik(首次启动自动生成) |
| HTTP(S) 端口 | 9201(9200 被 Cpolar 占用) |
| 传输层端口 | 9301 |
| CA 指纹 | 控制台输出的 fingerprint 字段 |
| Kibana 令牌 | 控制台输出的 enrollment token |
⚠️ 重要 :elastic 密码只显示一次!务必保存好。丢了只能重置:
bin\elasticsearch-reset-password -i elastic
IK 分词器加载成功

用 curl.exe 执行查询后返回:
name component version
---------------- ------------ -------
FONZO analysis-ik 8.10.0
analysis-ik 8.10.0 出现在列表中,IK 中文分词器安装并加载成功!
📋 最终可用信息速查表
| 项目 | 值 |
|---|---|
| ES 地址 | https://localhost:9201 |
| 用户名 | elastic |
| 密码 | b5lxxxxxxxxxddik |
| 协议 | HTTPS(自签名证书) |
| CA 证书路径 | config/certs/http_ca.crt |
| IK 插件版本 | 8.10.0 |
| IK 安装路径 | plugins/analysis-ik/ |
常用命令速查(Windows)
| 操作 | CMD | PowerShell |
|---|---|---|
| 启动 ES | set "ES_JAVA_OPTS=-Xms512m -Xmx512m" && elasticsearch.bat |
同左 |
| 测试连通 | curl -k -u elastic:密码 https://localhost:9201 |
curl.exe -k -u elastic:密码 https://localhost:9201 |
| 查看插件 | curl -k -u elastic:密码 https://localhost:9201/_cat/plugins?v |
同上,用 curl.exe |
| 安装插件 | (CMD 中 cd 到 bin 目录).\elasticsearch-plugin.bat install <url> |
.\elasticsearch-plugin.bat install <url> |
| 重置密码 | elasticsearch-reset-password -i elastic |
.\elasticsearch-reset-password.bat -i elastic |
总结
回顾这次安装过程,核心教训就一句话:大部分坑都是「Linux 教程 + Windows 环境」的兼容性问题。
汇总一下 6 个坑的本质:
| # | 坑的本质 | 一句话记住 |
|---|---|---|
| 1 | Linux shell 语法 ≠ Windows CMD | 用 set "K=V" && .bat 替代 K=V ./bin/... |
| 2 | 默认端口被占用 | 先看启动日志确认实际端口 |
| 3 | Windows curl 默认查 CRL | 加 -k 跳过证书验证 |
| 4 | PowerShell 不搜当前目录 | .bat / .exe 前面加 .\ |
| 5 | 插件装了但 ES 没重启 | 改了 plugins 要重启才生效 |
| 6 | PowerShell 的 curl 是别名 | 用 curl.exe 调用真实程序 |
如果你正在做涉及 ES 的 Java 项目(比如 RAG 检索、日志分析、全文搜索),本地搭一个 ES 环境几乎是必经之路。希望这篇踩坑记录能帮你少走弯路,一次成功~
作为还在学习路上的大学生,这些都是我踩坑踩出来的经验,分享出来希望能帮到同样在学 Java 的小伙伴~如果有写得不对的地方,欢迎大佬们指正!
你们在学习的时候有遇到过什么有意思的坑吗?评论区聊聊呀👇
🎓 我是 小小放舟 ,一个正在努力打怪升级的后端学习者
🌊 个人主页:小小放舟的 CSDN
✨ 点赞收藏不迷路,我们一起放舟技术海~