We are currently using sunspot 1.3.3 gem. We configured solr spellchecker component with JaroWinklerDistance as below in solrConfig.xml. However, it results in ClassNotFoundException. How do we handle this? Is there some specific directory where we need to copy the jar file? How does one configure jetty/solr that is managed through sunspot?
<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>
We have already tried putting lucene-spellchecker**.jar under rails_app_root/solr/lib and it doesn’t work.
Thanks
exception stacktrace
HTTP ERROR: 500
Severe errors in solr configuration.
Check your log files for more detailed information on what may be
wrong.If you want solr to continue after configuration errors, change:
false
in null
————————————————————- org.apache.solr.common.SolrException: Error loading class ‘
org.apache.lucene.search.spell.JaroWinklerDistance
‘ at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:373)
at
org.apache.solr.core.SolrResourceLoader.newInstance(SolrResourceLoader.java:388)
at
org.apache.solr.spelling.AbstractLuceneSpellChecker.init(AbstractLuceneSpellChecker.java:95)
at
org.apache.solr.spelling.IndexBasedSpellChecker.init(IndexBasedSpellChecker.java:56)
at
org.apache.solr.handler.component.SpellCheckComponent.inform(SpellCheckComponent.java:274)
at
org.apache.solr.core.SolrResourceLoader.inform(SolrResourceLoader.java:486)
at org.apache.solr.core.SolrCore.(SolrCore.java:588) at
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)
at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at
org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:594)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:139)
at
org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1218)
at
org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:500)
at
org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at
org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:147)
at
org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:161)
at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at
org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:147)
at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at
org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
at 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)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
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) Caused by:
java.lang.ClassNotFoundException:
org.apache.lucene.search.spell.JaroWinklerDistance
at java.net.URLClassLoader$1.run(URLClassLoader.java:217) at java.security.AccessController.doPrivileged(Native Method) at
java.net.URLClassLoader.findClass(URLClassLoader.java:205) at
java.lang.ClassLoader.loadClass(ClassLoader.java:321) at
java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:615) at
java.lang.ClassLoader.loadClass(ClassLoader.java:266) at
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 more RequestURI=/solr/admin/Powered by Jetty://
The class should be included in one of the following jars :-
So you can confirm if the jar is included in the classpath when solr starts up and loads external jars.
If you are executing it in Jetty, you can update the lib directives in SolrConfig.xml to look into the lib where the library exists.
You can also want to look at this Interesting thread.
Putting it on a single line :-