Hiya,
I'm currently trying to compile and load my own similarity class in
Solr, and I'm having a bit of a problem. Here's what I've done so far:
1) Create the .java for the class using SweetSpotSimilarity as a
model. I'm using the code below to make sure I can get this working
-- my real class will do something a bit different.
.....
package org.apache.lucene.misc;
import org.apache.lucene.search.Similarity;
import org.apache.lucene.search.DefaultSimilarity;
public class CustomSimilarity extends DefaultSimilarity {
public CustomSimilarity() {
super();
}
public float lengthNorm(String fieldName, int numTerms) {
return (float)1.0;
}
public float tf(int freq) {
return (float)1.0;
}
}
.....
2) Create the .jar file. (Maybe I'm doing this wrong?)
> javac classpath lucene-core-nightly.jar CustomSimilarity.java
> jar -cvf CustomSimilarity.jar CustomSimilarity.class
3) Put the .jar file in my solr home /lib directory. (/var/solr/lib
for me)
4) Edit schema.xml with this line:
<similarity class="org.apache.lucene.misc.CustomSimilarity"/>
5) I'm using Jetty, and read that I may need to ensure the .jar is in
the classpath, so I added this to start.config (I've tried with and
without this):
# solr specific jars
/var/solr/lib/CustomSimilarity.jar always
Then, when I fire up Jetty, I get the following error:
10:59:01.885 WARN!! [main] org.mortbay.jetty.Server.main(Server.java:
465) >08> EXCEPTION
org.mortbay.util.MultiException[org.apache.solr.core.SolrException:
Error loading class 'org.apache.lucene.misc.CustomSimilarity']
at org.mortbay.http.HttpServer.doStart(HttpServer.java:686)
at org.mortbay.util.Container.start(Container.java:72)
at org.mortbay.jetty.Server.main(Server.java:460)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.mortbay.start.Main.invokeMain(Main.java:151)
at org.mortbay.start.Main.start(Main.java:476)
at org.mortbay.start.Main.main(Main.java:94)
org.apache.solr.core.SolrException: Error loading class
'org.apache.lucene.misc.CustomtSimilarity'
at org.apache.solr.core.Config.findClass(Config.java:208)
at org.apache.solr.core.Config.newInstance(Config.java:213)
at org.apache.solr.schema.IndexSchema.readConfig
(IndexSchema.java:363)
at org.apache.solr.schema.IndexSchema.<init>
(IndexSchema.java:69)
at org.apache.solr.core.SolrCore.<init>(SolrCore.java:191)
at org.apache.solr.core.SolrCore.getSolrCore(SolrCore.java:172)
at org.apache.solr.servlet.SolrServlet.init(SolrServlet.java:
72)
at javax.servlet.GenericServlet.init(GenericServlet.java:211)
at org.mortbay.jetty.servlet.ServletHolder.initServlet
(ServletHolder.java:383)
at org.mortbay.jetty.servlet.ServletHolder.start
(ServletHolder.java:243)
at
org.mortbay.jetty.servlet.ServletHandler.initializeServlets
(ServletHandler.java:446)
at
org.mortbay.jetty.servlet.WebApplicationHandler.initializeServlets
(WebApplicationHandler.java:321)
at org.mortbay.jetty.servlet.WebApplicationContext.doStart
(WebApplicationContext.java:509)
at org.mortbay.util.Container.start(Container.java:72)
at org.mortbay.http.HttpServer.doStart(HttpServer.java:708)
at org.mortbay.util.Container.start(Container.java:72)
at org.mortbay.jetty.Server.main(Server.java:460)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.mortbay.start.Main.invokeMain(Main.java:151)
at org.mortbay.start.Main.start(Main.java:476)
at org.mortbay.start.Main.main(Main.java:94)
Caused by: java.lang.ClassNotFoundException:
org.apache.lucene.misc.CustomSimilarity
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.net.FactoryURLClassLoader.loadClass
(URLClassLoader.java:580)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:
319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at org.apache.solr.core.Config.findClass(Config.java:192)
... 23 more
[0]=org.apache.solr.core.SolrException: Error loading class
'org.apache.lucene.misc.CustomSimilarity'
at org.apache.solr.core.Config.findClass(Config.java:208)
at org.apache.solr.core.Config.newInstance(Config.java:213)
at org.apache.solr.schema.IndexSchema.readConfig
(IndexSchema.java:363)
at org.apache.solr.schema.IndexSchema.<init>
(IndexSchema.java:69)
at org.apache.solr.core.SolrCore.<init>(SolrCore.java:191)
at org.apache.solr.core.SolrCore.getSolrCore(SolrCore.java:172)
at org.apache.solr.servlet.SolrServlet.init(SolrServlet.java:
72)
at javax.servlet.GenericServlet.init(GenericServlet.java:211)
at org.mortbay.jetty.servlet.ServletHolder.initServlet
(ServletHolder.java:383)
at org.mortbay.jetty.servlet.ServletHolder.start
(ServletHolder.java:243)
at
org.mortbay.jetty.servlet.ServletHandler.initializeServlets
(ServletHandler.java:446)
at
org.mortbay.jetty.servlet.WebApplicationHandler.initializeServlets
(WebApplicationHandler.java:321)
at org.mortbay.jetty.servlet.WebApplicationContext.doStart
(WebApplicationContext.java:509)
at org.mortbay.util.Container.start(Container.java:72)
at org.mortbay.http.HttpServer.doStart(HttpServer.java:708)
at org.mortbay.util.Container.start(Container.java:72)
at org.mortbay.jetty.Server.main(Server.java:460)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.mortbay.start.Main.invokeMain(Main.java:151)
at org.mortbay.start.Main.start(Main.java:476)
at org.mortbay.start.Main.main(Main.java:94)
Caused by: java.lang.ClassNotFoundException:
org.apache.lucene.misc.CustomSimilarity
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.net.FactoryURLClassLoader.loadClass
(URLClassLoader.java:580)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:
319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at org.apache.solr.core.Config.findClass(Config.java:192)
... 23 more
I'm can't where my failure point could be. Any help would be greatly
appreciated!
Mark