【问题标题】:ClassNotFoundException when applying Japanese filedType应用日语文件类型时出现 ClassNotFoundException
【发布时间】:2017-09-18 14:05:49
【问题描述】:

我下载了 Solr 版本 4.7.0,然后像这样为日语文件类型添加过滤器(使用包中的示例目录):

<fieldType name="text_ja_start_with" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.JapaneseTokenizerFactory" mode="search" userDictionary="lang/userdict_ja.txt"/>
    <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt" />
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ja.txt" />
    <filter class="solr.CJKWidthFilterFactory"/>
    <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
    <filter class="solr.JapaneseReadingFormFilterFactory" useRomaji="false"/>
    <filter class="solr.ICUTransformFilterFactory" id="Katakana-Hiragana"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" side="front"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.JapaneseTokenizerFactory" mode="search" userDictionary="lang/userdict_ja.txt"/>
    <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt" />
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ja.txt" />
    <filter class="solr.CJKWidthFilterFactory"/>
    <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
    <filter class="solr.JapaneseReadingFormFilterFactory" useRomaji="false"/>
    <filter class="solr.ICUTransformFilterFactory" id="Katakana-Hiragana"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

由于此错误,服务器无法启动:

原因:java.lang.ClassNotFoundException: org.apache.lucene.analysis.util.MultiTermAwareComponent

我进行了一些搜索,但据说 MultiTermAwareComponent 是 Solr 的抽象组件 (http://lucene.apache.org/core/4_0_0/analyzers-common/org/apache/lucene/analysis/util/MultiTermAwareComponent.html)。 所以我不知道如何解决这个问题。

更新:

当我复制 2 个库文件 ($root/contrib/analysis-extras/lucene-libs/lucene-analyzers-icu-4.7.0.jar$root/contrib/analysis-extras/lib/icu4j-52.1.jar) 用于 ICUTransformFilterFactory 过滤器到 $root/example/lib/ext,它会抛出错误以上。当不添加2个文件到libs目录时,错误不会发生但不能使用ICUTransformFilterFactory过滤器

【问题讨论】:

    标签: java solr


    【解决方案1】:

    我已经解决了问题。

    过滤器ICUTransformFilterFactory的lib文件需要包含在solrconfig.xml中,使用标签,不要复制到example目录下的lib文件夹中。

    现在它正在工作。

    谢谢大家的帮助

    【讨论】:

    • 要添加到solrconfig.xml 的行是&lt;lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs/" regex="lucene-analyzers-icu-\d.*\.jar" /&gt;
    【解决方案2】:

    MultiTermAwareComponent 是一个interface,需要实现。

    在您的过滤器中,显然您已经过滤掉了它的实现。 CJKWidthFilterFactoryLowerCaseFilterFactory 正在实现 interface。使用这些知识来修复您的过滤器。

    【讨论】:

    • 是的,谢谢,我已经更新了关于错误原因的问题,我认为不是因为 MultiTermAwareComponent 没有实现。
    • 好吧,无论如何,你遇到了一个接口被使用但没有被实现的问题。这反映在我的回答中,我已经告诉你我在你的代码中找到的两个实现接口的类。无论您是使用其他实现还是不过滤掉现有的实现,都应该解决这个问题。您的新问题还与缺少接口的实现或缺少依赖项有关。仔细阅读文档,对你有很大帮助。
    • 谢谢,我已经弄清楚了,配置错误,lib文件必须包含在solrconfig.xml中,而不是复制到solr实例的lib文件夹中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 2014-12-10
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多