我有兴趣了解一下Lucene查询的得分方式。在他们的文档中,他们提到了VSM。我熟悉VSM,但它似乎与它们允许的查询类型不一致。
我尝试逐步执行BooleanScorer2和BooleanWeight的源代码,但没有真正有用。
我的问题是,有人可以逐步执行一个BooleanScorer来解释它如何结合查询。
另外,有没有办法简单地发送几个术语,只是得到这些术语的原始tf.idf分数,文档中描述的方式?
答案 0 :(得分:4)
开始的地方是http://lucene.apache.org/java/3_3_0/api/core/org/apache/lucene/search/Similarity.html
我认为这会清除你的不一致吗? Lucene将信息检索的布尔模型(BM)与信息检索的矢量空间模型(VSM)相结合 - 由BM“批准”的文档由VSM评分。
接下来要看的是Searcher.explain,它可以为您提供一个字符串,解释如何计算(查询,文档)对的分数。
通过执行BooleanScorer进行跟踪可能具有挑战性,我认为它最容易理解BooleanScorer2,它使用像ConjunctionScorer / DisjunctionSumScorer这样的子核心,并将BooleanScorer视为优化。
如果这令人困惑,那么在TermScorer上开始更简单。我个人认为它仍然是“自下而上”:
一般来说,它绝对难以追踪lucene如何评分文档,因为在所有发布的表单中,记分员负责两件事:匹配和计算分数。在Lucene的主干(http://svn.apache.org/repos/asf/lucene/dev/trunk/)中,它们现在是分开的,这样一种相似性基本上负责得分的所有方面,这是分开的从匹配。所以API可能更容易理解,也许更难,但至少你可以参考许多其他评分模型(BM25,语言模型,随机性差异,基于信息的模型)的实现,如果你感到困惑:{{3} }