java - 如何向 Lucene/Solr 相似性类添加新方法?

标签 java solr lucene

我编写了一个名为 MyNewSimilarityClass 的新类,它扩展了 Solr 中的 DefaultSimilarity 类;特别是,我在该类中定义了一个自定义方法,因为现有的方法不足以满足我的需求,我想改进排名算法。

为了确保 Solr 使用我的新类,我在 schema.xml 中添加了以下行:

<similarity class="org.apache.lucene.search.similarities.MyNewSimilarityClass"/>

我知道我的类已添加到类加载器中,并且 Solr 实际上使用它:当我运行 Solr 查询时,我覆盖和修改的方法正在工作。

但是,当我运行查询时,Solr 当前不使用我的自定义方法。尽管我已经在我的类中定义了该新方法,并且我的类已按预期加载,但我不知道应该在哪里调用我的自定义方法,以便将其用于排名算法。

我知道在 Lucene/Solr 中扩展类时如何重写方法,但我不知道如何添加新/自定义方法。

我需要修改 Solr 中的哪个文件以便查询使用我的自定义方法?

最佳答案

除非您修改 Lucene 的内部工作方式,否则查询不会使用您的自定义方法。评分机制使用一个接口(interface),您可以在代码中实现该接口(interface)。这是您必须使用的,除非您想要创建 Lucene 和可能的 Solr 的自定义构建 - 我不会推荐这样做,除非您对 Lucene 和 Java 都有相当的经验并且想要为自己维护一个自定义版本。

不过,我不太确定为什么需要调用自定义方法。该界面允许应用加法和乘法评分。当您创建自定义相似性类时,您通常使用 DefaultSimilarity class作为起点,然后覆盖您想要不同得分的不同部分。没有什么可以阻止您调用自定义方法之一作为该评分方法的一部分,或者如果从父方法返回的分数在特定范围内。

参见Lucene's Practical Scoring Formula了解 DefaultSimilarity 类的每个部分的 Hook 位置(或者查看 TFIDF 相似度类以获取替代实现)。

如果您对如何使用这些类有更具体的问题,请针对您尝试过的内容以及遇到的问题提出合适的问题。

关于java - 如何向 Lucene/Solr 相似性类添加新方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25495244/

相关文章:

java - 听起来是 Java 语言。错误

java - 使用库或算法压缩视频大小的最快方法

java - JPanel 在更改背景时不保持颜色 alpha

apache - 如何知道每日索引文件的Apache Solr状态

mysql - 使用 Solr 数据导入处理程序将多值字段从 mySQL 导入 Solr

java - 从命中/命中迁移到 TopDocs/TopDocCollector

java - 如何在java中创建一个相机来改变视角?

java - 如何防止 solr 在索引时解码 url?

java - Lucene搜索不适用于字符串数字组合java

java - 如何扩展 Lucene 的 StandardAnalyzer 以进行自定义特殊字符处理?