我第一次使用Hibernate搜索。当我尝试添加Analyzer时,我收到编译时错误 -
incompatible types: java.lang.Class<org.apache.lucene.analysis.core.WhitespaceTokenizerFactory> cannot be converted to java.lang.Class<? extends org.apache.solr.analysis.TokenizerFactory>
如错误所示,我尝试添加solr-core jar,如下所示,但似乎它也不包含指定的类:
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-core</artifactId>
<version>4.8.0</version>
</dependency>
这是我的实体类:
import org.apache.lucene.analysis.core.LowerCaseFilterFactory;
import org.apache.lucene.analysis.core.WhitespaceTokenizerFactory;
import org.apache.lucene.analysis.ngram.NGramFilterFactory;
import org.hibernate.search.annotations.Analyzer;
import org.hibernate.search.annotations.AnalyzerDef;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.Parameter;
import org.hibernate.search.annotations.TokenFilterDef;
import org.hibernate.search.annotations.TokenizerDef;
@Entity
@Table(name = "hk_system_message_info")
@Indexed
@AnalyzerDef(name = "myanalyzer",
tokenizer = @TokenizerDef(factory = WhitespaceTokenizerFactory.class),
filters = {@TokenFilterDef(factory = LowerCaseFilterFactory.class), @TokenFilterDef(factory = NGramFilterFactory.class, params = { @Parameter(name = "maxGramSize", value = "1024") })})
public class HkMessageEntity implements Serializable {
...
}
我为hibernate-search添加的依赖项(注意:根据需要添加其他hibernate依赖项,这仅用于搜索):
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search-orm</artifactId>
<version>4.5.1.Final</version>
</dependency>
Hibernate-Analyzer
已自动添加,因此我没有单独添加。
我不知道为什么在hibernate搜索jar中找不到FilterFactory
类。另外,我知道在后端,Hibernate使用Apache Lucene搜索。我在源代码中也看到了WhitespaceTokenFactory
扩展TokenFactory
类,但仍显示此错误。
是否还需要添加其他依赖项?在文档中,我只发现了这个并添加了它。我错过了什么?
答案 0 :(得分:0)
要使用Apache Lucene 4.8(或相同版本的Solr),您需要Hibernate Search 5.0
此版本中,分析仪不再是Solr的一部分,而是分布在Lucene罐中。
另见The Hibernate Search Migration Guide。
或者使用Hibernate Search 4.x,您应该使用Apache Lucene 3.6.x。