You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by mark angelillo <li...@snooth.com> on 2007/04/09 18:08:05 UTC

Error loading custom similarity class

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


Re: Error loading custom similarity class

Posted by mark angelillo <li...@snooth.com>.
Thanks, Yonik. I was definitely missing that.

On Apr 9, 2007, at 2:08 PM, Yonik Seeley wrote:

> On 4/9/07, mark angelillo <li...@snooth.com> wrote:
>> package org.apache.lucene.misc;
>
> [...]
>> 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
>
> This may be the problem.  The path in the jar file needs to reflect  
> the package.
> So the CustomSimilarity.class file needs to be in the org/apache/ 
> lucene/misc/
> directory.
>
> -Yonik


Re: Error loading custom similarity class

Posted by Yonik Seeley <yo...@apache.org>.
On 4/9/07, mark angelillo <li...@snooth.com> wrote:
> package org.apache.lucene.misc;

[...]
> 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

This may be the problem.  The path in the jar file needs to reflect the package.
So the CustomSimilarity.class file needs to be in the org/apache/lucene/misc/
directory.

-Yonik