【发布时间】: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