【问题标题】:Apache Custom Lucene ScoringApache 自定义 Lucene 评分
【发布时间】:2013-04-17 08:43:32
【问题描述】:

我正在尝试修改 Lucene 的默认相似度分数,如下所示。假设每个文档以及查询都由唯一的单词组成。我们对查询 q 和文档 d 的自定义相似度得分应该是com(d,q)/(size(d)+size(q))。其中com(d,q) 是出现在两者中的术语数(请注意,查询和文档中没有重复的术语)。 size(d)size(q) 是每个词条的数量。我们使用WhiteSpaceAnalyzer。我们假设词条和文档的频率为 1,并且词条没有被提升。

【问题讨论】:

  • 你的问题是?

标签: lucene size similarity scoring


【解决方案1】:

要应用您自己的评分,您需要将Similarity 设置为您自己的实现。您需要在 computeNorm 方法中处理 sive,该方法存储在索引时。其余应由coord 处理。您可以扩展TFIDFSimilarity 并免费获得很多东西,让您不必担心设置自己的SimScorers 等等。你只需要删除很多功能。请记住,这将是每个文档中存储的额外信息

所以,类似:

class MySimilarity extends TFIDFSimilarity {
    // 1/size(d) where size(d) is the number of terms in the Field,
    // rather than the Document (which doesn't really make sense)
    computeNorm(FieldInvertState state, Norm norm) {
        norm.setByte(encodeNorm(1 / state.getLength()));  // encodeNorm loses a great deal of precision, FYI.
    }

    // 1/size(q)
    float coord(int overlap, int maxOverlap) {
        return 1 / maxOverlap;
    }

    float idf(long docFreq, long numDocs) {
        return 1
    }

    float queryNorm(float sumOfSquaredWeights) {
        return 1;
    }

    float scorePayload(int doc, int start, int end, BytesRef payload) {
        return 1;
    }

    float sloppyFreq(int distance) {
        return 1;
    }

    float tf(float freq) {
        return 1;
    }

    float tf(int freq) {
        return 1;
    }
}

我认为应该按照以下方式计算分数:

(1 / size(q)) * ∑ (1 / size(d))

这应该符合您的要求。

不过,我有一种强烈的感觉,你正在把婴儿和洗澡水一起扔出去。

【讨论】:

  • 谢谢。但它给出了 1/(size(q).size(d)) ... 如果我需要 (size(q)+size(d)) 怎么办?
  • 也就是说,如何在搜索时得到一个字段的长度?
  • 不,你第一次说对了。对我来说已经看起来像 XY 问题,我们现在不要移动到 Z。您将字段长度存储在规范中,使其在相似度中易于访问。为了防止计分器在每个匹配项上乘以分数,您可能需要从头开始实施相似度,并实施 SimScorers 以适应。 ExactSimScorer 可能是您主要感兴趣的。
  • 我想我想出了如何将长度存储在标准中,并且仍然确保它不会影响分数。但这里有一个问题。 ComputeNorm 在索引时被调用,参数是 FieldInvertState 的一个实例。如何在搜索时读取规范(例如在 Coord 函数中)?感谢您的帮助!
  • 您可以使用AtomicReader.normValues获取规范
猜你喜欢
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 2015-01-27
  • 2016-02-01
  • 2011-08-20
  • 1970-01-01
  • 2014-06-23
  • 2015-09-02
相关资源
最近更新 更多