升级Solrj至8.11.3后连接Solr遇版本格式错误,求助解决
解决Solrj 8.11.3连接Solr时的"Invalid version (expected 2, but 31)"错误
这个错误的核心原因是Solrj客户端与Solr服务端的javabin序列化版本不兼容。javabin是Solrj默认使用的高效序列化格式,不同版本的Solr/Solrj对其格式定义可能存在差异,当客户端发送的javabin版本超出服务端的解析范围时就会触发该错误。
解决方案:
对齐Solr服务端与Solrj版本
最彻底的解决方式是将Solr服务端也升级到8.11.3,保持客户端与服务端版本完全一致。Solr官方对同版本的Solrj和Solr服务端兼容性有严格保障,能从根源避免序列化格式不匹配的问题。强制切换序列化格式
如果暂时无法升级Solr服务端,可以在Solrj客户端配置中禁用javabin,改用XML或JSON这类兼容性更强的格式:// 创建HttpSolrClient时指定XML格式请求器 HttpSolrClient solrClient = new HttpSolrClient.Builder("http://your-solr-instance-url") .withRequestWriter(new XMLResponseWriter()) .build();或者通过配置类指定:
SolrClientConfig clientConfig = new SolrClientConfig.Builder() .setRequestWriter("json") // 可选"xml"或"json" .build(); HttpSolrClient solrClient = new HttpSolrClient.Builder("http://your-solr-instance-url") .withConfig(clientConfig) .build();排查依赖冲突
检查项目依赖树,确认没有引入旧版本的Solr/Solrj相关包(比如solr-core、solrj的旧版本)。这类冲突会导致运行时实际使用的序列化类与预期的8.11.3版本不符,进而引发格式错误。- Maven项目可执行:
mvn dependency:tree - Gradle项目可执行:
gradlew dependencies
找到冲突的旧版本依赖后,在依赖声明中添加排除规则。
- Maven项目可执行:
关于之前组合正常的说明:
Solr 8.11.2与8.11.3属于同一系列的小版本迭代,官方可能在这两个版本间保持了javabin格式的向下兼容,因此Solrj 8.11.3可以正常与Solr 8.11.2通信。但如果当前连接的Solr服务端版本低于8.11.2,就会出现版本解析不兼容的问题。
内容的提问来源于stack exchange,提问作者crimson_joey
相关产品推荐
相关产品推荐

