使用Drush索引时Solr Search_api_attachment失败问题求助
看起来你遇到的核心问题是Solr找不到solr.extraction.ExtractingRequestHandler类——这个类是Solr用来解析Office、PDF等附件内容的关键组件,依赖Apache Tika库。结合你的环境和错误日志,我整理了几个排查和解决步骤:
1. 检查Solr核心的solrconfig.xml配置
首先确认你的Solr核心配置文件($SOLR_HOME/server/solr/my_Index_name/conf/solrconfig.xml)里是否已经定义了ExtractingRequestHandler:
<requestHandler name="/update/extract" class="solr.extraction.ExtractingRequestHandler"> <lst name="defaults"> <str name="lowernames">true</str> <str name="fmap.content">text</str> <!-- 这里的text要对应你Solr schema里的可搜索字段 --> </lst> </requestHandler>
如果没有这段配置,手动添加进去,然后重启Solr服务:
sudo systemctl restart solr
2. 确认Tika相关依赖jar包存在
Solr的ExtractingRequestHandler需要Apache Tika的支持jar包,在Solr 5.5.5中,这些包默认在安装目录的contrib/extraction/lib/和dist/solr-cell-5.5.5.jar里。你需要把这些jar包复制到你的Solr核心的lib目录($SOLR_HOME/server/solr/my_Index_name/lib/,如果没有就新建这个目录),或者全局的Solr lib目录($SOLR_HOME/server/solr/lib/):
# 复制Solr Cell和Tika相关jar包 cp /path/to/solr-5.5.5/dist/solr-cell-5.5.5.jar $SOLR_HOME/server/solr/my_Index_name/lib/ cp /path/to/solr-5.5.5/contrib/extraction/lib/*.jar $SOLR_HOME/server/solr/my_Index_name/lib/
复制完成后记得重启Solr,确保jar包被加载。
3. 验证Extract Handler是否正常可用
通过浏览器或者curl访问Solr的Extract Handler地址,确认没有500错误:
curl http://your-solr-host:8983/solr/my_Index_name/update/extract
如果返回Solr的默认请求处理页面(即使提示缺少参数),说明handler已经正常加载;如果还是报错,查看Solr的日志文件($SOLR_HOME/server/logs/solr.log),里面会有更详细的jar包加载失败信息。
4. 检查Drupal search_api_attachments配置
进入Drupal后台,找到search_api_attachments的设置页面:
- 确认“Solr extract path”设置为
/update/extract(和你solrconfig.xml里定义的handler名称一致) - 确认附件内容被映射到了Solr中正确的可搜索字段(比如schema里的
text字段,需要是分词、可索引的类型)
5. 重新索引并测试
先清空现有索引,再重新执行索引操作:
# 清空索引 drush sapi-c 'my_Index_name' # 重新索引 drush sapi-i 'my_Index_name'
索引完成后,测试附件搜索功能,看是否能正常返回包含附件内容的结果。
额外注意事项
- 权限问题:确保Solr用户(通常是
solr)对复制的jar包有读取权限,RHEL7上可以用chown -R solr:solr $SOLR_HOME/server/solr/my_Index_name/lib/调整权限 - SELinux限制:如果RHEL7的SELinux处于强制模式,可能会阻止Solr读取jar包,可以临时关闭SELinux测试(
sudo setenforce 0),如果问题解决,再添加对应的SELinux策略
内容的提问来源于stack exchange,提问作者Mubarak Shaikh

