我创建了这样的自定义相似性类:
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。
最佳答案
原来问题出在我本地机器上的 java 版本!
我正在使用 Java 1.8 构建该类,服务器版本是 1.7。取消注释指向相似性类的行后重新加载 schema.xml 会在日志中弹出一个指出问题的错误。
关于java - 自定义相似度类 solr 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27842292/