【问题标题】:Calculate the score only based on the documents have more occurance of term in lucene仅根据文档在 lucene 中出现更多术语来计算分数
【发布时间】:2011-04-15 02:40:42
【问题描述】:

我开始研究基于 lucene.net 引擎的简历检索(文档)组件。它工作得很好,它会获取文档并根据

VSM 背后的理念是 查询词出现在 文件相对数量 次这个词出现在所有 集合中的文档越多 该文件与 查询。

Lucene的实用评分函数来源于以下。

score(q,d)=coord(q,d)·queryNorm(q)· ∑( tf(t in d) ·idf(t)2 · t.getBoost() · norm(t,d) ) 
                                  t in q

在这个

  • tf(t in d) 与术语的频率相关,定义为术语 t 在当前评分文档 d 中出现的次数。给定术语出现次数越多的文档得分越高
  • idf(t) 代表逆文档频率。该值与 docFreq 的倒数相关(出现术语 t 的文档数)。这意味着稀有词对总分的贡献更高。

这在大多数情况下确实非常好,但是由于 fieldnorm 计算结果不准确

fieldnorm 又名“字段长度规范”值表示该文档中该字段的长度(因此较短的字段会自动增加)。

因此,我们没有得到准确的结果。 举个例子,我有 10000 个文档,其中 3000 个文档有 java 和 oracle 关键字。而且每个文档出现的次数也不同。

  • 假设 doc A 在 1000 个单词中得到 10 个 java 20 oracle,doc B 在 50 个单词中得到 2 个 java 2 oracle
  • 如果正在搜索查询“java and oracle”,lucene 会返回高分文档 B 由于长度标准化。

由于我们需要检索文档的业务性质,应该首先出现更多搜索关键字,我们并不真正关心文档的长度。

因此,一个有着大量关键字的大简历的人被移到了结果下方,并出现了一些小简历。

为避免这种情况,我需要禁用长度标准化。有人可以帮我解决这个问题吗?

我已附上 Luke 结果图片供您参考。

在此图像中,使用 java 50 次和 oracle 6 次的文档下降到第 11 位。

但是这个文档用 java 24 次和 oracle 5 次是由于 fieldnorm 的缘故。

希望我清楚地传达了信息...如果不是请问我,我会提供更多信息

【问题讨论】:

    标签: c# java search lucene lucene.net


    【解决方案1】:

    您可以使用 Field.setOmitNorms(true) 禁用长度标准化

    【讨论】:

    • 这么短的答案的长问题;)
    • @serg10,钥匙对于大型车辆来说太小了,但没有它你就无法开始:)
    • 禁用归档规范有什么缺点?
    猜你喜欢
    • 1970-01-01
    • 2022-06-11
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多