不能直接用pecl install solr,PHP 8+下该扩展已废弃;必须用Composer安装solarium/solarium,通过HTTP连接独立运行的Solr服务,并确保Core路径、中文分词器及字段配置正确。

不能直接用 pecl install solr,PHP 8+ 环境下该扩展已废弃且无法编译;必须用 Composer 加载 solarium/solarium,走 HTTP 协议与 Solr 通信。
确认 Solr 服务已独立运行且可访问
phpEnv 不提供 Solr 安装功能,它只是 PHP/Apache/MySQL 集成环境。Solr 是 Java 应用,必须单独部署:
- 已安装 JDK 11 或 JDK 17(
JAVA_HOME指向 JDK 根目录,不是 JRE) - Solr 已解压(如
C:\solr\),并用管理员权限执行solr.cmd start -p 8983 - 浏览器能打开
http://localhost:8983/solr/,看到管理界面 - 已创建 Core(如
mycore),路径为/solr/mycore;若用默认路径,path填/solr,core字段留空或显式设为null
用 Composer 安装 solarium/solarium 并启用自动加载
在项目根目录执行:
composer require solarium/solarium
确保项目入口文件(如 index.php)顶部有:
立即学习“PHP免费学习笔记(深入)”;
require_once 'vendor/autoload.php';
注意:vendor/autoload.php 必须存在且路径正确;若项目无 composer.json,先运行 composer init 初始化后再安装。
初始化 Solarium Client 并验证连接
连接参数必须与 Solr 实际配置严格一致,常见错因是端口、路径或 core 名称不匹配:
-
host:填127.0.0.1(不用localhost,避免 DNS 解析延迟或失败) -
port:Solr 默认8983,若改过需同步更新 -
path:必须以/solr开头,若 Core 名为mycore,则填/solr/mycore;不要漏掉开头的/ -
scheme:生产环境建议用https,但本地开发通常用http
示例代码:
$config = [
'endpoint' => [
'localhost' => [
'scheme' => 'http',
'host' => '127.0.0.1',
'port' => 8983,
'path' => '/solr/mycore',
'timeout' => 5,
]
]
];
$client = new \Solarium\Client($config);
执行后不报错即连接成功;若抛出 Solarium\Exception\HttpException,说明网络不通或路径错误。
中文搜索前必须配置 schema 和分词器
刚装好的 Solr 默认不支持中文检索,solarium 再正确也无法返回合理结果:
- 进入 Solr Core 的
conf目录(如C:\solr\server\solr\mycore\conf\) - 编辑
managed-schema(Solr 8+)或schema.xml(旧版),添加中文分词字段类型,例如使用ik_smart或smartcn - 确保
text_general字段类型已绑定中文分词器,或新建字段类型并应用到目标字段(如title、content) - 重启 Solr 服务使配置生效;也可通过 API 重载 Core:
http://localhost:8983/solr/admin/cores?action=reload&core=mycore
没配分词器时,即使 $client->createSelect() 能查出文档,关键词也基本匹配不上——这不是 PHP 代码问题,而是 Solr 底层索引未切词。
最易被忽略的是:Solr Core 的 schema 配置和 PHP 中字段名必须完全一致(大小写敏感),且中文分词器必须在索引和查询两个阶段都启用,否则搜索仍会失效。



















