Linux安装Solr搜索引擎教程

作者:技术拾光时间:2026-07-03 09:02:07浏览:388

Solr8.11及以上版本推荐使用bin/solrstart脚本启动内置Jetty服务器,Java版本必须严格匹配:8.11版要求使用Java11,9.x版要求使用Java17。默认的solrhome路径为server/solr,自定义路径需使用-s参数。中文分词器需通过analyzer接口验证是否生效。默认端口为8983,如启动失败可查看server/lo

直接说结论:Solr 8.11+ 推荐用 bin/solr start 启动内置 Jetty,别硬套 Tomcat;只有老版本(7.x 及更早)或有强监控/多租户需求时才考虑外置容器。


Ja va 版本不对,bin/solr start 会静默失败

不是报错退出,就是卡在 “Starting Solr” 不动,或者启动后立刻消失 —— 八成是 Ja va 版本不匹配。

  • Solr 8.11.x 这边有个硬门槛:ja va -version 输出的版本号里必须带着 11.(比如 11.0.22),1.8.0_* 是绝对不行的。
  • Solr 9.x 更严格,强制要求 Ja va 17+,而且 OpenJDK 用起来更稳。CentOS/RHEL 上直接 sudo yum install -y ja va-17-openjdk-devel 就搞定。
  • 千万别想着改 SOLR_JA VA_HOME 来绕过检查 —— 这个变量只影响启动脚本读取路径,真正决定 JVM 版本的是系统 PATH 里的 ja va 命令,改了也没用。
  • 验证方法很简单:跑一下 bin/solr start -V,第一行就会显示 Using Ja va version: ...,版本不对就老老实实换 JDK。

solr home 路径搞错,新建 core 就报 Can't find configset '_default'

这不是配置文件丢了,而是 Solr 根本没找到 configset 目录。默认情况下,Solr 8+ 把 server/solr 当作 root 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 "http://localhost:8080/solr/mycore/analysis/fieldanalysis.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?先查端口和防火墙,再看日志位置

浏览器打不开 http://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 启动逻辑看似简单,实际耦合了 Ja va 版本、路径约定、配置加载顺序、网络绑定策略四层判断;任何一个环节偏离默认假设,都会导致“没报错但不工作”。最容易被忽略的是 server/solr 这个隐式 home 路径,以及 analyzer 接口的实测验证 —— 它们不显眼,但决定功能是否真可用。