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

Reply via email to