Java hibernate搜索中Analyzer中的编译时错误

Java hibernate搜索中Analyzer中的编译时错误,java,hibernate,solr,lucene,hibernate-search,Java,Hibernate,Solr,Lucene,Hibernate Search,我第一次使用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> 我为hib

我第一次使用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>
我为hibernate搜索添加的依赖项注意:其他hibernate依赖项是根据需要添加的,这仅用于搜索:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-search-orm</artifactId>
    <version>4.5.1.Final</version>
</dependency>
Hibernate Analyzer是自动添加的,所以我没有单独添加它

我不知道为什么在hibernate搜索jar中找不到FilterFactory类。另外,我知道在后端,Hibernate使用ApacheLucene搜索。我在源代码中也看到了,WhitespaceTokenFactory扩展了TokenFactory类,但仍然显示了此错误


是否需要添加任何其他依赖项?在文档中,我只找到了这个并添加了它。我缺少什么?

使用与您需要的相同版本的Apache Lucene 4.8或Solr

同样在这个版本中,分析仪不再是Solr的一部分,而是分布在Lucene罐中

另见


或者,要使用Hibernate Search 4.x,您应该使用Apache Lucene 3.6.x。

我不确定它是否解决了这个问题,但您添加了错误的Lucene/solr版本。看看他们使用的是3.6.2而不是4.8。
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 {
...
}
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-search-orm</artifactId>
    <version>4.5.1.Final</version>
</dependency>