Solr自定义相似性

Solr自定义相似性,solr,similarity,Solr,Similarity,我想在solr schema.xml中设置自己的自定义相似性,但在理解此功能时遇到一些问题。 我想完全取消solr评分(tf、idf、coord和fieldNorm) 我不知道从哪里开始。我知道的事情 我必须编写自己的DefaultSimulation实现 重写(tf、idf、coord和fieldNorm)-方法 在schem.xml中加载该类 在哪里存放课程? 网络上有没有工作的例子?我找不到 谢谢我自己想出来的。我已将自己的DefaultSimilarity实现存储在solr中的/dist

我想在solr schema.xml中设置自己的自定义相似性,但在理解此功能时遇到一些问题。 我想完全取消solr评分(tf、idf、coord和fieldNorm)

我不知道从哪里开始。我知道的事情

  • 我必须编写自己的DefaultSimulation实现
  • 重写(tf、idf、coord和fieldNorm)-方法
  • 在schem.xml中加载该类
  • 在哪里存放课程? 网络上有没有工作的例子?我找不到


    谢谢

    我自己想出来的。我已将自己的DefaultSimilarity实现存储在solr中的/dist/folder下。然后我将
    添加到我的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;
    }
    
    }
    

    要点:

    相似性的实现

    下面是一个示例,说明如何从solr 8开始执行此操作

    public class CustomSimilarityFactory extends SchemaSimilarityFactory {
    
        @Override
        public Similarity getSimilarity() {
            return new CustomSimilarity();
        }
    
    }
    
    将您的库添加到solrconfig.xml
    ,并将您的自定义相似性添加到schema.xml

    最新版本的solr中似乎删除了DefaultSimilarity,是否有相同的更新要点?@jagamot请参阅我的帖子以了解新版本。
    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;
        }
    
    }