You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级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
      找到冲突的旧版本依赖后,在依赖声明中添加排除规则。

关于之前组合正常的说明:

Solr 8.11.2与8.11.3属于同一系列的小版本迭代,官方可能在这两个版本间保持了javabin格式的向下兼容,因此Solrj 8.11.3可以正常与Solr 8.11.2通信。但如果当前连接的Solr服务端版本低于8.11.2,就会出现版本解析不兼容的问题。

内容的提问来源于stack exchange,提问作者crimson_joey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 18:42:40