我想在ColognePhonetic中使用PhoneticFilterFactory,但我只得到一个“java.lang.NoClassDefFoundError:” 知道这里有什么问题吗?
我对PhoeneticFilterFactory的定义
@TokenFilterDef(factory = PhoneticFilterFactory.class, params = {
@Parameter(name = "encoder", value="ColognePhonetic")
})
以下是整个Anyalyzer的定义:
@AnalyzerDef(name = "customanalyzer", tokenizer =
@TokenizerDef(factory = StandardTokenizerFactory.class), filters = {
@TokenFilterDef(factory = LowerCaseFilterFactory.class),
@TokenFilterDef(factory = PhoneticFilterFactory.class, params = {
@Parameter(name = "encoder", value="ColognePhonetic")
}),
@TokenFilterDef(factory = SnowballPorterFilterFactory.class, params = {
@Parameter(name = "language", value = "German")
})
})
错误:
ERROR 2013-11-11 14:20:08,010 [LogErrorHandler] HSEARCH000058: HSEARCH000116: Unexpected error during MassIndexer operation: java.lang.NoClassDefFoundError: org/apache/commons/codec/Encoder
at org.apache.lucene.analysis.phonetic.PhoneticFilter.incrementToken(PhoneticFilter.java:64)
at org.apache.lucene.analysis.snowball.SnowballFilter.incrementToken(SnowballFilter.java:76)
at org.apache.lucene.index.DocInverterPerField.processFields(DocInverterPerField.java:146)
at org.apache.lucene.index.DocFieldProcessorPerThread.processDocument(DocFieldProcessorPerThread.java:278)
at org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:766)
at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:2060)
at org.hibernate.search.backend.impl.lucene.works.AddWorkDelegate.performWork(AddWorkDelegate.java:71)
at org.hibernate.search.backend.impl.lucene.LuceneBackendTaskStreamer.doWork(LuceneBackendTaskStreamer.java:66)
at org.hibernate.search.backend.impl.lucene.LuceneBackendQueueProcessor.applyStreamWork(LuceneBackendQueueProcessor.java:83)
at org.hibernate.search.indexes.impl.DirectoryBasedIndexManager.performStreamOperation(DirectoryBasedIndexManager.java:121)
at org.hibernate.search.backend.impl.StreamingSelectionVisitor$AddSelectionDelegate.performStreamOperation(StreamingSelectionVisitor.java:99)
at org.hibernate.search.backend.impl.batch.DefaultBatchBackend.sendWorkToShards(DefaultBatchBackend.java:75)
at org.hibernate.search.backend.impl.batch.DefaultBatchBackend.enqueueAsyncWork(DefaultBatchBackend.java:62)
at org.hibernate.search.batchindexing.impl.EntityConsumerLuceneWorkProducer.index(EntityConsumerLuceneWorkProducer.java:210)
at org.hibernate.search.batchindexing.impl.EntityConsumerLuceneWorkProducer.indexAllQueue(EntityConsumerLuceneWorkProducer.java:138)
at org.hibernate.search.batchindexing.impl.EntityConsumerLuceneWorkProducer.run(EntityConsumerLuceneWorkProducer.java:106)
at org.hibernate.search.batchindexing.impl.OptionallyWrapInJTATransaction.run(OptionallyWrapInJTATransaction.java:89)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
在JBoss AS 7.1.3.Final上使用Hibernate Search 4.4.0 Final with Hibernate Core {4.1.6.Final}
答案 0 :(得分:2)
您的类路径中似乎缺少Apache Commons Codec库。如果你看一下Hibernate Search 4.4.0.Final的依赖树,你会发现对commons-codec 1.6有一个传递依赖:
hibernate-search:4.4.0.Final
- hibernate-search-orm:4.4.0.Final
- hibernate-search-analyzers:4.4.0.Final
- solr-analysis-extras:3.6.2
- solr-core:3.6.2
- commons-codec:1.6
- lucene-phonetic:3.6.2
- commons-codec:1.6
因此,将commons-codec添加到类路径中至少应解决NoClassDefFoundError
。
答案 1 :(得分:0)
来自hibernate团队的Gunnar帮助解决了问题。 (https://forum.hibernate.org/viewtopic.php?f=9&t=1029612)
解决方案是将commons-codec-1.8.jar复制到我的jboss安装中的apache lucene的模块folde(JBOSS_HOME / modules / org / apache / lucene / 3.6.2)并在模块中创建一个条目。 XML。
之后发现了语音效果,特别是colognephonetic,我的索引工作正常。
感谢所有帮助过的人。