【问题标题】:How can I add new methods to Lucene/Solr similarity class?如何向 Lucene/Solr 相似类添加新方法?
【发布时间】:2014-08-26 19:13:29
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 在尝试破解 Solr 之前,您应该认真学习一些 Java。学完Java后,这个答案会对你有所帮助:stackoverflow.com/questions/3035831/solr-lucene-scorer
  • 另外,这是您第四次发布此问题,您仍然发布完全相同的背景材料,而没有根据您尝试过的内容或出现问题的地方进行扩展。
  • @MatsLindh 我道歉;这次我面临一个相关但不同的问题。我已尽我所能编辑并改进了我的问题。希望现在它会更有意义。如果仍然缺少相关信息,请告诉我。

标签: java solr lucene


【解决方案1】:

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

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

请参阅 Lucene's Practical Scoring Formula 了解 DefaultSimilarity 类的每个部分的挂钩位置(或查看 TFIDF Similarity 类以获得替代实现)。

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

【讨论】:

    猜你喜欢
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2011-11-21
    • 2023-02-01
    相关资源
    最近更新 更多