我开始研究基于 lucene.net 引擎的简历检索(文档)组件。它工作得很好,它会获取文档并根据
VSM 背后的理念是
查询词出现在 a 中的次数
文档相对于数量
该术语出现在所有
集合中的文档越多
该文件的相关内容是
询问。
Lucene的实用评分函数源自以下内容。
score(q,d)=coord(q,d)·queryNorm(q)· ∑( tf(t in d) ·idf(t)2 · t.getBoost() · norm(t,d) )
t in q
in this
-
tf(d 中的 t)与术语频率相关,定义为术语 t 在当前评分文档 d 中出现的次数。给定术语出现次数越多的文档得分越高
-
idf(t)代表逆文档频率。该值与 docFreq(出现术语 t 的文档数量)的倒数相关。这意味着越罕见的术语对总分的贡献越高。
在大多数情况下,这确实非常好,但由于场范数计算,结果不准确
fieldnorm 又名“字段长度规范”值表示该文档中该字段的长度(因此较短的字段会自动增加)。
因此我们没有得到准确的结果。
举个例子,我有 10000 个文档,其中 3000 个文档有 java 和 oracle 关键字。而且每个文档出现的次数都不同。
- 假设文档 A 在 1000 个单词中获得了 10 java 20 oracle,文档 B 在 50 个单词中获得了 2 java 2 oracle
- 如果正在搜索查询“java and oracle”,lucene 将返回具有高分的文档 B
由于长度标准化。
由于业务的性质,我们需要检索更多搜索关键字出现的文档,因此我们并不真正关心文档的长度。
因此,一个拥有大量关键字的大简历的人被移至结果下方,并出现了一些小简历。
为了避免这种情况,我需要禁用长度标准化。有人可以帮我弄这个吗??
我附上了卢克结果图像供您参考。
在此图中,包含 java 50 次和 oracle 6 次的文档下移至第 11 位。
但由于 fieldnorm,这个包含 java 24 次和 oracle 5 次的文档是得分最高的。
希望我清楚地传达了信息...如果没有,请问我,我会提供更多信息