改进lucene的打分算法
这个是从别人的文章转过来的,记录一下,做全网搜索的时候可能会有用
?
score_d?=?sum_t(tf_q?*?idf_t?/?norm_q?*?tf_d?*?idf_t?/?norm_dt_t)
score_d:?Document(d)?的得分
sum_t:?Term(t)?的总和
tf_q:?查询中?t?的频度的平方根
tf_q:?d?中?t?的频度的平方根
idf_t:?log(numDocs/docFreq_t?+?1)?+?1.
0numDocs:?索引中Document的数量
docFreq_t:?包含t的Document的数量
norm_q:?sqrt(sum_t((tf_q*idf_t)^2))norm_d_t:?在与?t?相同域的?d?中?tokens?数量的平方根
基础排序算法的不足要点:?查询词在一个?Document?中的位置并不重要。?如果一个?Document?中含有该查询词的次数越多,该得分越高。 一个命中document中,如果除了该查询词之外,其他的词越多,该得分越少。不足:?查询精确度不好。?没有体现网页的重要性。??
Score_d?=?k1?*?OldScore?+?k2?*?PrScore?+?k3?*?ReScore?+?k4?*?homePageScore?
?
Score_d:?记录d的得分。?
?
OldScore:?由基础排序算法计算出的记录d的得分。?
?
PrScore:?记录d的PageRank的得分。?
?
ReScore:?记录d的二次检索的加分,?ReScore?=?rescore?+?(hitNum?-?1)?*?increment?
?
homePageScore:?主页的加分?
?
K1,?K2,?K3,?K4为权重系数?PR(A)?=?(1?-?d)?+?d(PR(1)?/?C(1)?+?...?+?PR(n)/C(n))?
?
PageRank,?二次检索,?以及主页加分的调整确实优化了查询精确度。