【问题标题】:Solr Custom SimilaritySolr 自定义相似度
【发布时间】:2013-12-06 16:21:33
【问题描述】:

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

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

  1. 我必须编写自己的 DefaultSimilarity 实现。
  2. 覆盖 (tf,idf,coord 和 fieldNorm) - 方法。
  3. 在schem.xml中加载类

在哪里存储类? 网络上有任何工作示例吗?我找不到!

谢谢

【问题讨论】:

    标签: solr similarity


    【解决方案1】:

    我自己想出来的。我已经将我自己的 DefaultSimilarity 实现存储在 solr 的 /dist/ 文件夹下。然后我将<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;
    }
    
    }
    

    要点:https://gist.github.com/FabianKoestring/7846845

    【讨论】:

    • DefaultSimilarity 似乎已在最新版本的 solr 中被删除,是否有相同的更新要点?
    • @jagamot 查看我的帖子以获取更新版本。
    【解决方案2】:

    相似度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>

    【讨论】:

    • 如果我要使用 CustomSimScorer 覆盖分数,我如何访问文档中的特定字段(例如 POPULARITY_RANK)并影响最终分数。 For - 只取 solr 计算分数的 10% 并将 POPULARITY_RANK 添加到它。
    猜你喜欢
    • 2017-12-22
    • 2015-12-27
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    相关资源
    最近更新 更多