我创建了这样的自定义相似度类:
package org.apache.lucene.search.similarities;
import org.apache.lucene.index.FieldInvertState;
import org.apache.lucene.search.similarities.DefaultSimilarity;
public class MyNewSimilarityClass extends DefaultSimilarity {
@Override
public float coord(int overlap, int maxOverlap) {
return 1.0f;
}
@Override
public float idf(long docFreq, long numDocs) {
return 1.0f;
}
@Override
public float lengthNorm(FieldInvertState arg0) {
return 1.0f;
}
@Override
public float tf(float freq) {
return 1.0f;
}
}
将其导出到jar文件并将其上传到solr中的/ dist文件夹。 在我的solrconfig中,我添加了以下行:
<lib dir="../../../dist/" regex="similarityJar.*\.jar" />
在我的schema.xml中,我添加了以下行:
<similarity class="org.apache.lucene.search.similarities.MyNewSimilarityClass"> </similarity>
当启动我的solr实例时,我可以看到jar被添加到类加载器中:
3170 [coreLoadExecutor-5-thread-1] INFO org.apache.solr.core.SolrResourceLoader – Adding 'file:/var/www/apache-solr/dist/similarityJarNew.jar' to classloader
服务器启动但卡在:
3988 [coreLoadExecutor-5-thread-1] INFO org.apache.solr.schema.IndexSchema – Reading Solr Schema from /var/www/apache-solr/productie/solr/collection1/conf/sc hema.xml
4025 [coreLoadExecutor-5-thread-1] INFO org.apache.solr.schema.IndexSchema – [collection1] Schema name=example
4174 [main] INFO org.apache.solr.servlet.SolrDispatchFilter – user.dir=/var/www/apache-solr/productie
4174 [main] INFO org.apache.solr.servlet.SolrDispatchFilter – SolrDispatchFilter.init() done
4217 [main] INFO org.eclipse.jetty.server.AbstractConnector – Started SocketConnector@0.0.0.0:8983
此后核心不会加载。
当我在schema.xml中注释掉引用相似性类的行并在后台启动服务器时,一切都很顺利,核心被加载。现在,当我取消注释schema.xml中的行并在管理面板中重新加载核心时,一切仍然有效但新的相似性类似乎不起作用。
分数和结果顺序仍与以前相同...... 任何帮助将不胜感激!!
我在CentOS服务器上使用solr 4.10.2。
答案 0 :(得分:0)
原来问题是我本地机器上的java版本!
我用Java 1.8构建类,服务器版本为1.7。取消注释指向相似性类的行后重新加载schema.xml会在指出问题的日志中弹出错误。