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) 在 org.apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java:83) 在 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) 在 org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) 在 org.mortbay.jetty.handler.HandlerCollection。doStart(HandlerCollection.java:147) 在 org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:161) 在 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) 在 org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) 在 org.mortbay.xml.XmlConfiguration.main(XmlConfiguration.java:929)在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect。DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:616) at org.mortbay.start.Main.invokeMain(Main.java:183) at 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.lang.ClassLoader.loadClass(ClassLoader.java:266) 在 java.lang.Class 的 java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:615)。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 /

由码头提供支持://

4

1 回答 1

5

该类应包含在以下罐子之一中:-

  • 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 回答