1

現在、sunspot 1.3.3 gem を使用しています。solrConfig.xml で以下のように JaroWinklerDistance を使用して solr スペルチェッカー コンポーネントを構成しました。ただし、ClassNotFoundException が発生します。これをどのように処理しますか?jar ファイルをコピーする必要がある特定のディレクトリはありますか? 太陽黒点を介して管理される jetty/solr をどのように構成しますか?

<lst name="spellchecker">
     <str name="name">jarowinkler</str>
     <str name="field">spell</str>
     <str name="distanceMeasure">
       org.apache.lucene.search.spell.JaroWinklerDistance
     </str>
     <str name="spellcheckIndexDir">./spellchecker</str>
</lst>

すでに lucene-spellchecker**.jar を rails_app_root/solr/lib の下に置いてみましたが、うまくいきません。

ありがとう

例外スタックトレース

HTTP エラー: 500

Solr 構成の重大なエラー。

ログ ファイルをチェックして、問題の詳細を確認してください。

構成エラーの後も solr を続行するには、次のように変更します。

間違い

ヌルで

-------------------------------------------------- ----------- org.apache.solr.common.SolrException: org.apache.solr.core.SolrResourceLoader.findClass( でクラス ' org.apache.lucene.search.spell.JaroWinklerDistance ' をロード中にエラーが発生しましたSolrResourceLoader.java:373) org.apache.solr.core.SolrResourceLoader.newInstance(SolrResourceLoader.java:388) org.apache.solr.spelling.AbstractLuceneSpellChecker.init(AbstractLuceneSpellChecker.java:95) org.apache.solr .spelling.IndexBasedSpellChecker.init(IndexBasedSpellChecker.java:56) org.apache.solr.handler.component.SpellCheckComponent.inform(SpellCheckComponent.java:274) org.apache.solr.core.SolrResourceLoader.inform(SolrResourceLoader.java) :486) org.apache.solr.core.SolrCore.(SolrCore.java:588) org.apache.solr.core.CoreContainer$Initializer.initialize(CoreContainer.java:137) at org.apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java:83) at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:99) org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) で org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:594) で org.mortbay.jetty.servlet.Context.startContext(Context .java:139) org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1218) で org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:500) で org.mortbay.jetty. webapp.WebAppContext.doStart(WebAppContext.java:448) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) at org.mortbay.jetty.handler.HandlerCollection.org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:161) の doStart(HandlerCollection.java:147) org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) の org.mortbay.jetty .handler.HandlerCollection.doStart(HandlerCollection.java:147) で org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) で org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117) でorg.mortbay.jetty.Server.doStart(Server.java:210) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) at org.mortbay.xml.XmlConfiguration.main(XmlConfiguration.java:929) sun.reflect.NativeMethodAccessorImpl.invoke0 (ネイティブ メソッド) で、sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) で、sun.reflect で。DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:616) org.mortbay.start.Main.invokeMain(Main.java:183) org.mortbay.start .Main.start(Main.java:497) at org.mortbay.start.Main.main(Main.java:115) 原因: java.lang.ClassNotFoundException: org.apache.lucene.search.spell.JaroWinklerDistance at java .net.URLClassLoader$1.run(URLClassLoader.java:217) で java.security.AccessController.doPrivileged(Native Method) で java.net.URLClassLoader.findClass(URLClassLoader.java:205) で java.lang.ClassLoader.loadClass( ClassLoader.java:321) で java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:615) で java.lang.ClassLoader.loadClass(ClassLoader.java:266) で java.lang.Class で。forName0(Native Method) at java.lang.Class.forName(Class.java:264) at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:357) ... 32 以上 RequestURI=/solr/admin /

Jetty:// を搭載

4

1 に答える 1

5

クラスは、次のjarのいずれかに含まれている必要があります:-

  • solr-lucene-spellchecker-XX0.jar
  • lucene-spellchecker-XX0.jar

したがって、solrが起動して外部jarをロードするときに、jarがクラスパスに含まれているかどうかを確認できます。
Jettyで実行している場合は、SolrConfig.xmlのlibディレクティブを更新して、ライブラリが存在するlibを調べることができます。

この興味深いスレッドもご覧ください。

一行にそれを置く:-

<str name="distanceMeasure">org.apache.lucene.search.spell.JaroWinklerDistance</str>
于 2012-12-04T09:07:55.903 に答える