服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

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.0
numDocs: 索引中Document的数量
docFreq_t: 包含t的Document的数量
norm_q: sqrt(sum_t((tf_q*idf_t)^2))
norm_d_t: 在与 t 相同域的 d 中 tokens 数量的平方根

基础排序算法的不足

要点:
  查询词在一个 Document 中的位置并不重要。
  如果一个 Document 中含有该查询词的次数越多,该得分越高。
  一个命中document中,如果除了该查询词之外,其他的词越多,该得分越少。

不足:
  查询精确度不好。
  没有体现网页的重要性。
  Lucene的得分算法, 不适合网页搜索。

改进的算法:
  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, 二次检索, 以及主页加分的调整确实优化了查询精确度。

扫描关注微信公众号