直接说结论:Solr 8.11+ 推荐使用 bin/solr start 启动内置 Jetty,无需强行搭配 Tomcat;仅在老版本(7.x 及更早)或需要强监控、多租户场景下才考虑外置容器。
Java 版本不匹配,bin/solr start 会静默失败
如果 Solr 启动时没有报错退出,而是卡在 “Starting Solr” 无响应,或者刚启动就立刻消失 —— 八成是 Java 版本不兼容的问题。
- Solr 8.11.x 有硬性门槛:执行
java -version输出的版本号必须包含11.(例如11.0.22),1.8.0_*绝对无法通过验证。 - Solr 9.x 要求更严格,强制需要 Java 17+,且 OpenJDK 的稳定性更好。在 CentOS/RHEL 上直接运行
sudo yum install -y java-17-openjdk-devel即可完成安装。 - 不要试图通过修改
SOLR_JAVA_HOME来绕过版本检查 —— 该变量仅控制启动脚本读取路径,真正决定 JVM 版本的是系统PATH环境变量中的java命令,修改后依然无效。 - 验证方法很简单:执行
bin/solr start -V,第一行会显示Using Java version: ...,如果版本不符合要求,请更换正确的 JDK。
solr home 路径设置错误,新建 core 时出现 Can't find configset '_default'
这个错误并非配置文件丢失,而是 Solr 找不到 configset 目录。默认情况下,Solr 8+ 将 server/solr 作为根 solr home —— 注意,这是一个硬编码路径,并非由环境变量动态驱动。
- 不要随意设置
SOLR_HOME:一旦 export 该变量,所有 core 都必须放在指定路径下,且该路径必须包含configsets/_default子目录,否则bin/solr create -c mycore必然会失败。 - 推荐做法是保持默认,让 Solr 自动管理
server/solr目录;新建 core 时命令会自动在server/solr/mycore/conf/下生成标准配置结构。 - 如果确实需要自定义路径,请使用
-s /path/to/home参数(例如bin/solr create -c mycore -s /opt/my-solr-home),不要直接修改环境变量。 - 另外,
server/solr/mycore/core.properties文件不能删除:其中的configSet=xxx是运行时加载的依据,删除后通过 UI 或 API 创建 core 都会失败。
中文分词器安装后未生效?不能只看插件是否加载成功
即使已将插件复制到 server/solr/configsets/_default/conf/analysis-ik/、修改了 managed-schema、重启了 Solr —— 这些操作只是“表面完成”。要验证实际效果,必须通过 analyzer 接口进行测试。
- 执行命令:
curl "https://localhost:8080/solr/mycore/analysis/field?analysis.fieldname=text_general&analysis.text=北京大学" - 重点关注返回 JSON 中的
tokens数组:如果依然是单字切分("北","京","大","学"),说明 IK 分词器未生效;正确结果应为"北京大学"或"北京","大学"。 - 常见陷阱:schema 中字段 type 指向的
text_ik类型未定义,或定义中的analyzer class="org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer"使用了旧版类名 —— Solr 8+ 已弃用SmartChineseAnalyzer,改为使用analysis-smartcn插件配合smartcn_tokenizer实现。 - 注意端口号:默认端口是 8983,而非 8080;如果你在
solr.in.sh中修改了SOLR_PORT,curl 请求地址也需要同步更新。
启动后无法访问 Web UI?先检查端口和防火墙,再查看日志位置
如果浏览器打不开 https://localhost:8983/solr,不要急着重装,90% 的情况都是网络或权限问题引起的。
- 首先确认 Solr 确实在运行:执行
bin/solr status,输出中应包含solr-8.11.2 is running和对应的 PID。 - 检查监听端口:运行
netstat -tuln | grep :8983,没有输出则说明未成功监听;如果有输出但外部无法访问,大概率是被防火墙拦截了。 - 在 CentOS/RHEL 上执行:
sudo firewall-cmd --permanent --add-port=8983/tcp && sudo firewall-cmd --reload来开放端口。 - 日志文件不在
catalina.out:Solr 8+ 默认将日志写入server/logs/solr.log,所有错误信息都记录在其中。启动失败时,使用bin/solr start -f(前台模式)可以实时看到报错信息。 - 不要只局限于
localhost:远程服务器应使用服务器 IP 访问;如果 Solr 默认绑定127.0.0.1,需要在solr.in.sh中将SOLR_HOST改为0.0.0.0才能实现外网访问。
复杂之处在于:Solr 启动逻辑看似简单,实际上耦合了 Java 版本、路径约定、配置加载顺序、网络绑定策略四层判断;任何一个环节偏离默认假设,都会导致“没有报错却不工作”的现象。最容易被忽略的是 server/solr 这个隐式 home 路径,以及 analyzer 接口的实测验证 —— 它们虽然不显眼,但直接决定了功能是否真正可用。
