我写了一个名为MyNewSimilarityClass
的新类,它扩展了Solr中的DefaultSimilarity
类;特别是,我已经在该类中定义了一个自定义方法,因为现有方法不足以满足我的需求,我想改进排名算法。
为了确保我的新课程被Solr使用,我在schema.xml
添加了以下一行:
<similarity class="org.apache.lucene.search.similarities.MyNewSimilarityClass"/>
我知道我的类被添加到类加载器中,并且Solr实际上使用它:当我运行Solr查询时,我已经覆盖和修改的方法正在运行。
但是,当我运行查询时,Solr当前不使用我的自定义方法。虽然我已经定义了我的类和我的类中的新方法按预期加载,但我不知道应该在哪里调用自定义方法以便在排名算法中使用它。
我知道如何在Lucene / Solr中扩展类时重写方法,我不知道如何添加新的/自定义方法。
在Solr中,我需要修改哪个文件以便查询使用我的自定义方法?
答案 0 :(得分:2)
除非您修改Lucene的内部工作方式,否则查询将不会使用您的自定义方法。评分机制使用了一个接口,这是您在代码中实现的接口。这是你必须要使用的东西,除非你想创建一个Lucene和可能Solr的自定义构建 - 我不建议这样做,除非你对Lucene和Java都有相当的经验,并希望自己维护一个自定义版本。 / p>
我不确定为什么你需要调用自定义方法。界面允许应用加法和倍增得分。创建自定义相似度类时,通常使用DefaultSimilarity class作为起点,然后覆盖要以不同方式得分的不同部分。作为评分方法的一部分,或者如果从父方法返回的分数在一定范围内,则无法阻止您调用自定义方法之一。
请参阅Lucene's Practical Scoring Formula,了解DefaultSimilarity类的每个部分所在的位置(或查看TFIDF Similarity类以获取其他实现)。
如果您对如何使用其中任何一个课程有更具体的问题,请询问您尝试过的问题以及您遇到的问题。