Windows 本地安装 Elasticsearch 8.10.0 与 IK 分词器(2026)

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 里执行,结果------

错误现象

  1. 第一层错误ES_JAVA_OPTS="-Xms5g -Xmx5g" 这句在 CMD 里根本不认,Windows CMD 不支持这种 KEY=VALUE 前缀赋值方式。
  2. 第二层错误./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) -- 给函数提供的标志无效

输入密码后还是同样报错。

原因分析

这里其实有 两个问题叠加

  1. 端口错了 。我的电脑上 9200 端口被 Cpolar 内网穿透工具占用 了!ES 启动时检测到 9200 被占,自动切换到了 9201 端口
  2. 所以 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: FONZOversion.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
  • 所以当你传 -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

✨ 点赞收藏不迷路,我们一起放舟技术海~


相关推荐
zzz_23681 小时前
【Java实习面试算法冲刺】总复盘
java·算法·面试
從南走到北1 小时前
JAVA无人共享系统无人场馆预约篮球系统源码支持小程序+公众号+APP+H5
java·开发语言·小程序
码智社1 小时前
Maven 零基础完整教程
java·开发语言·maven
半夜修仙1 小时前
Spring集成邮箱功能
java·开发语言·spring boot·spring·rabbitmq·github·maven
F20226974861 小时前
西门子 PLC 与 C# 通信_项目实战
大数据·c#
曾阿伦1 小时前
Maven 构建工程化指南
java·maven
宠友信息1 小时前
从重复请求到订单同步看内容社区源码的处理思路
java·spring boot·redis·后端·mysql·spring
带刺的坐椅1 小时前
用 Solon TeamAgent 落地供应链异常管理与自动补货
java·ai·llm·agent·solon·供应链
潇凝子潇1 小时前
UnsupportedOperationException
java·前端·数据库