我想在我的solr schema.xml中设置自己的自定义相似度,但我在理解此功能时遇到一些问题。 我想完全停用solr评分(tf,idf,coord和fieldNorm)。
我不知道从哪里开始。我知道的事情
在哪里存放课程? 网络上有任何工作示例吗?我找不到一个!
感谢
答案 0 :(得分:12)
我自己想通了。我在solr中的/ dist /文件夹下存储了我自己的DefaultSimilarity实现。然后我将<lib dir="../../../dist/org/apache/lucene/search/similarities/" regex=".*\.jar"/>
添加到我的solrconfig.xml中,一切正常。
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;
}
}
答案 1 :(得分:0)
相似性changed in solr 8.0的实现。
这里是一个自solr 8起的示例。
public class CustomSimilarityFactory extends SchemaSimilarityFactory {
@Override
public Similarity getSimilarity() {
return new CustomSimilarity();
}
}
public class CustomSimilarity extends Similarity{
private final SimScorer customSimScorer = new CustomSimScorer();
@Override
public long computeNorm(FieldInvertState fis) {
return 1L;
}
@Override
public SimScorer scorer(float f, CollectionStatistics cs, TermStatistics... tss) {
return customSimScorer;
}
}
public class CustomSimScorer extends SimScorer {
@Override
public float score(float f, long l) {
return 1f;
}
}
将您的库添加到solrconfig.xml <lib dir="/yourCustomDir/" regex=".*\.jar"/>
中,并将您的自定义相似性添加到schema.xml
<similarity class="com.christoph.solr.CustomSimilarityFactory"></similarity>