Windows环境下SolrCloud如何向Zookeeper上传OpenNLP二进制模型文件?
在Windows SolrCloud中上传OpenNLP模型到Zookeeper及相关问题解决
一、上传OpenNLP二进制模型到Zookeeper的步骤
Windows下直接用Solr自带的zkCli工具就能完成,具体操作如下:
- 打开命令提示符(CMD),切换到你的Solr安装目录的
bin文件夹,比如cd D:\solr-8.11.2\bin - 启动ZooKeeper客户端,连接到你的ZooKeeper集群:
(如果你的ZooKeeper是集群,把zkCli.bat -server localhost:2181localhost:2181换成集群地址,比如zk1:2181,zk2:2181) - 在zkCli命令行里,先创建存放OpenNLP模型的目录(假设用默认配置集
_default,如果是自定义配置集就替换成你的配置集名称):create /configs/_default/opennlp "" - 上传本地的OpenNLP模型文件,比如
en-sent.bin:
把put C:\your-model-path\en-sent.bin /configs/_default/opennlp/en-sent.binC:\your-model-path\换成你实际存放模型文件的本地路径 - 验证上传是否成功:
能看到ls /configs/_default/opennlpen-sent.bin就说明上传成功,也可以用get /configs/_default/opennlp/en-sent.bin查看文件内容(二进制文件会显示乱码,只要有内容就行)
二、解决Windows下无法应用LUCENE-2899.patch补丁的问题
Windows默认没有patch命令,直接用CMD执行会报错,推荐两种解决方式:
方式1:用Git Bash执行补丁
- 安装Git for Windows,安装时确保勾选“Git Bash Here”选项
- 右键点击Solr/Lucene源码目录,选择“Git Bash Here”打开终端
- 执行补丁命令:
把patch -p1 < /path/to/LUCENE-2899.patch/path/to/换成补丁文件的实际路径(Git Bash里可以用相对路径,比如./LUCENE-2899.patch) - 如果遇到换行符导致的错误,先执行:
再重新执行补丁命令git config --global core.autocrlf false
方式2:手动修改代码
如果不想折腾工具,可以直接看补丁文件里的内容,找到对应的Java文件,手动替换或添加代码。补丁文件是文本格式,里面会标注修改的文件路径和具体的代码差异,照着改就行,虽然麻烦但更稳妥。
三、解决“Can't find resource 'opennlp/en-sent.bin' in classpath or '/configs/_default'”报错
这个报错本质是Solr找不到你的OpenNLP模型文件,排查方向如下:
- 检查ZooKeeper里的文件路径是否正确:确保模型文件上传到了
/configs/你的配置集名称/opennlp/下,如果你用的不是默认的_default配置集,上传时要替换路径里的_default - 检查Solr配置文件里的路径是否匹配:打开你的Solr配置集里的
solrconfig.xml,找到OpenNLP的配置项,比如:
这里的路径是相对于配置集根目录的,所以对应ZooKeeper里的<processor class="solr.OpenNLPProcessorFactory"> <str name="sentenceModel">opennlp/en-sent.bin</str> </processor>/configs/配置集名/opennlp/en-sent.bin,要保证一致 - 刷新Solr配置:如果刚上传完模型,Solr节点可能还没同步配置,重启所有Solr节点,或者在Solr Admin界面的“Core Admin”里点击“Reload”重新加载核心
- 检查ZooKeeper权限:确保Solr进程有访问ZooKeeper里该路径文件的权限(Windows下一般不会有这个问题,但如果是部署在服务器上要注意)
内容的提问来源于stack exchange,提问作者Alexey Ponomarenko
相关产品推荐
相关产品推荐

