[英]Calculate the score only based on the documents have more occurance of term in lucene
我开始研究基于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
在这
这在大多数情况下确实非常好,但由于现场规范计算,结果并不准确
fieldnorm aka“field length norm”值表示该doc中该字段的长度(因此较短的字段会自动提升)。
由于这个原因,我们没有得到准确的结果。 举个例子,我得到10000个文件,其中3000个文件有java和oracle关键字。 并且每个文档看起来都没有变化。
由于业务的性质我们需要检索文件得到更多的搜索关键字出现应该先来,我们并不真正关心文件的长度。
因此,一个带有大量关键字的简历的Guy在结果中被移到了下面,并且出现了一些小的简历。
为了避免这种情况,我需要禁用长度标准化。 有人可以帮我弄这个吗??
我附上了Luke结果图片供您参考。
在此图像中,使用java 50次和oracle 6次的文档向下移动到第11位。
但是这个带有java 24次和oracle 5次的文档因为fieldnorm而成为最佳射手。
希望我清楚地传达信息......如果不是,请问我,我会提供更多信息
您可以使用Field.setOmitNorms禁用长度规范化(true)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.