尝试在solr中应用自定义筛选器时出现ClassCastException

时间:2015-10-15 12:22:05

标签: solr lucene

我正在使用4.10.3 solr并在我实现Factory with Filter

之后
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.util.TokenFilterFactory;

import java.util.Map;

public class CustomFilterFactory extends TokenFilterFactory {

protected CustomFilterFactory(Map<String, String> args) {
    super(args);
}

@Override
public TokenStream create(TokenStream tokenStream) {
    return new CustomFilter(tokenStream);
}
}  

当Solr启动时,我在日志中遇到了奇怪的错误:

Caused by: 
java.lang.ClassCastException: class org.apache.lucene.analysis.tr.ApostropheFilterFactory
at java.lang.Class.asSubclass(Class.java:3116)
at org.apache.lucene.util.SPIClassIterator.next(SPIClassIterator.java:141)
at org.apache.lucene.analysis.util.AnalysisSPILoader.reload(AnalysisSPILoader.java:79)
at org.apache.lucene.analysis.util.AnalysisSPILoader.<init>(AnalysisSPILoader.java:60)
at org.apache.lucene.analysis.util.AnalysisSPILoader.<init>(AnalysisSPILoader.java:49)
at org.apache.lucene.analysis.util.TokenFilterFactory.<clinit>(TokenFilterFactory.java:31)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:474)
at org.apache.solr.core.SolrResourceLoader.newInstance(SolrResourceLoader.java:593)
at org.apache.solr.schema.FieldTypePluginLoader$1.create(FieldTypePluginLoader.java:306)
at org.apache.solr.schema.FieldTypePluginLoader$1.create(FieldTypePluginLoader.java:299)
at org.apache.solr.util.plugin.AbstractPluginLoader.load(AbstractPluginLoader.java:151)
at org.apache.solr.schema.FieldTypePluginLoader.readAnalyzer(FieldTypePluginLoader.java:325)
at org.apache.solr.schema.FieldTypePluginLoader.create(FieldTypePluginLoader.java:95)
at org.apache.solr.schema.FieldTypePluginLoader.create(FieldTypePluginLoader.java:43)
at org.apache.solr.util.plugin.AbstractPluginLoader.load(AbstractPluginLoader.java:151)
at org.apache.solr.schema.IndexSchema.readSchema(IndexSchema.java:486)

知道什么可能导致这种状态吗?

字段定义:

<field name="ii" type="customFilter" indexed="true" stored="false"  required="false" multiValued="false"/>
<fieldType name="customFilter" class="solr.TextField">
    <analyzer>
        <charFilter class="com.nosql.search.solr.CustomFilterFactory" /> 
    </analyzer> 
</fieldType>

我使用相同的Java版本为我的自定义jar与过滤器和启动Solr。

如果我删除了对CustomFilterFactory的引用,它就可以。

1 个答案:

答案 0 :(得分:4)

我和Solr 6.4有同样的问题。但我的solr部署在Hybris 6框架内。关键是我试图将我的自定义标记过滤器库直接添加到solr服务器库$ {solr_instance} / server / lib,然后我得到一个异常,即引擎可以找到父lucene类TokenFilterFactory。添加相关的jar lucene-analyzers-common-x,lucene-core-x之后,我得到了与你相同的错误(java.lang.ClassCastException:class org.apache.lucene.analysis.tr.ApostropheFilterFactory)

要解决这个问题,我只是将自定义jar移动到自定义文件夹$ {solr_instance} / contrib / hybris / lib,而没有任何额外的lucene库。此外,我的solrconfig.xml已经有一个链接:

<lib dir="${solr.install.dir:../../../..}/contrib/hybris/lib" regex=".*\.jar" />

因此,可以得出结论,这种异常是指类路径歧义问题,这会使Solr感到困惑。