Solr从7.3.1升级到8.11.2后出现BoostedQuery类缺失错误
问题分析
核心错误是java.lang.NoClassDefFoundError: org/apache/lucene/queries/function/BoostedQuery,从栈跟踪可看出,错误发生在第三方同义词扩展插件SynonymExpandingExtendedDismaxQParserPlugin的代码逻辑中。根本原因是:
- Solr 8.11.2对应的Lucene版本里,
BoostedQuery类的包路径发生变更——从Lucene 7的org.apache.lucene.queries.function.BoostedQuery迁移到了Lucene 8的org.apache.lucene.queries.BoostedQuery - 当前使用的第三方插件版本是针对Solr 7.x开发的,无法适配Solr 8.x的类路径变化
解决方案
方案一:升级第三方同义词插件
- 找到适配Solr 8.11.2版本的
healthonnet SynonymExpandingExtendedDismaxQParserPlugin插件JAR包 - 替换Solr部署目录
lib文件夹下的旧版本插件JAR文件 - 重启Solr服务后重新测试搜索请求
方案二:改用Solr原生同义词功能
如果找不到适配的第三方插件版本,可替换为Solr原生支持的同义词实现:
- 索引时生效的同义词:在字段类型的分析链中添加
SynonymFilterFactory,配置同义词文件路径,示例配置:
<fieldType name="text_synonym" class="solr.TextField"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> </analyzer> </fieldType>
- 查询时生效的同义词:使用ExtendedDismax查询解析器的
synonyms参数,或在查询分析链中配置SynonymFilterFactory - 调整搜索请求,使用原生查询解析器(如edismax)替代第三方的
SynonymExpandingExtendedDismaxQParser
方案三:修改插件源码重新编译
若插件为开源项目,可下载源码修改BoostedQuery的导入路径:将org.apache.lucene.queries.function.BoostedQuery替换为org.apache.lucene.queries.BoostedQuery,然后针对Solr 8.11.2重新编译打包,替换原JAR文件
验证步骤
- 完成任一方案后重启Solr
- 用Postman重新发送原搜索请求,检查是否返回正常结果、无500错误
内容的提问来源于stack exchange,提问作者Nitu Dhaka
相关产品推荐
相关产品推荐

