升级Hibernate Search至5.9.3.Final时依赖与API报错求助
解决方案:Hibernate Search 5.9.3.Final 升级后的依赖与API适配
1. 依赖调整:替换Solr分析器为Lucene分析器
Hibernate Search 5.x不再依赖Solr的solr-core,而是直接使用Lucene的分析器组件。你需要移除solr-core v3.1.0依赖,添加Hibernate Search配套的Lucene分析器依赖即可:
如果用Maven,添加以下依赖:
<!-- Hibernate Search ORM核心依赖 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-search-orm</artifactId> <version>5.9.3.Final</version> </dependency> <!-- 内置适配好的Lucene分析器模块 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-search-analyzers</artifactId> <version>5.9.3.Final</version> </dependency>
该模块会自动管理配套的Lucene版本,无需单独引入Lucene核心包。
2. 代码API适配
(1)替换分词器类导入
原Solr分词器类已被Lucene对应类取代,修改导入语句:
// 替换旧的Solr分词器导入 import org.apache.lucene.analysis.standard.StandardTokenizerFactory;
(2)替换Index.UN_TOKENIZED
Hibernate Search 5.x中Index.UN_TOKENIZED已被移除,要实现“不分词直接索引”的效果,修改@Field注解:
// 替换旧的@Field注解 @Field(index = Index.YES, analyze = Analyze.NO, store = Store.YES)
Analyze.NO等价于旧版本的UN_TOKENIZED,表示不对字段内容做分词处理。
(3)修正@AnalyzerDef定义
确保分词器工厂使用Lucene类后,注解结构保持不变即可:
@AnalyzerDef(tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class), name = "en")
版本一致性验证
确保Hibernate相关依赖版本统一:
hibernate-search-orm5.9.3.Finalhibernate-entitymanager5.2.17.Final(与你当前使用版本一致,无需调整)
内容的提问来源于stack exchange,提问作者rob
相关产品推荐
相关产品推荐

