Lucene:Norwegian Analyzer - java.lang.NoSuchMethodError:org.apache.lucene.analysis.WordlistLoader.getSnowballWordSet

时间:2017-05-19 03:02:17

标签: hibernate lucene hibernate-search

我在部署新实施挪威分析器的项目时遇到异常

@Fields({ @Field(index = Index.YES, store = Store.YES, analyzer = @Analyzer(impl=NorwegianAnalyzer.class))

错误的详细堆栈跟踪是:

Caused by: org.hibernate.search.SearchException: Failed to instantiate lucene analyzer with type org.apache.lucene.analysis.no.NorwegianAnalyzer
        at org.hibernate.search.engine.impl.AnnotationProcessingHelper.getAnalyzer(AnnotationProcessingHelper.java:170)
        at org.hibernate.search.engine.impl.FieldMetadata.<init>(FieldMetadata.java:94)
        at org.hibernate.search.engine.spi.AbstractDocumentBuilder.bindFieldAnnotation(AbstractDocumentBuilder.java:1085)
        at org.hibernate.search.engine.spi.AbstractDocumentBuilder.checkForFields(AbstractDocumentBuilder.java:552)
        at org.hibernate.search.engine.spi.AbstractDocumentBuilder.initializeMemberLevelAnnotations(AbstractDocumentBuilder.java:485)
        at org.hibernate.search.engine.spi.AbstractDocumentBuilder.initializeClass(AbstractDocumentBuilder.java:392)
        at org.hibernate.search.engine.spi.AbstractDocumentBuilder.<init>(AbstractDocumentBuilder.java:174)
        at org.hibernate.search.engine.spi.DocumentBuilderContainedEntity.<init>(DocumentBuilderContainedEntity.java:60)
        at org.hibernate.search.spi.SearchFactoryBuilder.initDocumentBuilders(SearchFactoryBuilder.java:396)
        at org.hibernate.search.spi.SearchFactoryBuilder.buildNewSearchFactory(SearchFactoryBuilder.java:222)
        at org.hibernate.search.spi.SearchFactoryBuilder.buildSearchFactory(SearchFactoryBuilder.java:146)
        at org.hibernate.search.event.impl.FullTextIndexEventListener.initialize(FullTextIndexEventListener.java:130)
        at org.hibernate.search.hcore.impl.HibernateSearchIntegrator.integrate(HibernateSearchIntegrator.java:83)
        at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:306)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1797)
        at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:96)
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914)
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:899)
        at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:76)
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:268)
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
        ... 42 more
Caused by: org.hibernate.search.SearchException: Unable to instantiate analyzer class: org.apache.lucene.analysis.no.NorwegianAnalyzer. Verify it has a no-args public constructor and is not abstract. Also Analyzer implementation classes or their tokenStream() and reusableTokenStream() implementations must be final.
        at org.hibernate.search.util.impl.ClassLoaderHelper.analyzerInstanceFromClass(ClassLoaderHelper.java:234)
        at org.hibernate.search.engine.impl.AnnotationProcessingHelper.getAnalyzer(AnnotationProcessingHelper.java:161)
        ... 64 more
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at org.hibernate.search.util.impl.ClassLoaderHelper.analyzerInstanceFromClass(ClassLoaderHelper.java:215)
        ... 65 more
Caused by: java.lang.NoSuchMethodError: org.apache.lucene.analysis.WordlistLoader.getSnowballWordSet(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/Set;
        at org.apache.lucene.analysis.no.NorwegianAnalyzer$DefaultSetHolder.<clinit>(NorwegianAnalyzer.java:65)
        at org.apache.lucene.analysis.no.NorwegianAnalyzer.<init>(NorwegianAnalyzer.java:79)

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

堆栈跟踪中提到的org.apache.lucene.analysis.no.NorwegianAnalyzer似乎与org.apache.lucene.analysis.WordlistLoader的预期版本不匹配。

由于在最近的Apache Lucene版本中,两个类都包含在同一个jar中,因此您的类路径中可能会有一些重复版本的Lucene jar。

确保仅使用与Hibernate Search预期版本匹配的Apache Lucene版本的jar。