代码之家  ›  专栏  ›  技术社区  ›  RameshVel

仅根据lucene中术语出现较多的文献计算得分

  •  5
  • RameshVel  · 技术社区  · 14 年前

    我开始工作的简历检索(文件)组件的基础上lucene.net网站引擎。它工作得很好,它获取文档并根据

    查询项出现在 该术语出现在所有 收藏的文件越多 该文件与

    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在d中)
    • 以色列国防军(t) 表示逆文档频率。此值与docFreq的倒数(出现术语t的文档数)相关。这意味着稀有词对总分的贡献更大。

    这在大多数情况下确实是非常大的,但是由于fieldnorm的计算结果并不准确

    fieldnorm又名“field length norm”值表示该文档中该字段的长度(因此较短的字段会自动增大)。

    因此我们没有得到准确的结果。 例如,我有10000个文档,其中3000个文档包含java和oracle关键字。它在每个文档上出现的次数也各不相同。

    • 如果我在搜索一个查询“java和oracle”,lucene返回的docb得分很高 由于长度标准化。

    由于业务的性质我们需要检索得到的文档更多,搜索关键字的出现应该排在第一位,我们并不真正关心文档的长度。

    为了避免这种情况,我需要禁用长度规范化。有人能帮我吗??

    我已附上卢克的结果图像供您参考。

    在这幅图中,使用java 50次和oracle 6次的文档下移到第11位。

    alt text

    但是,由于fieldnorm的原因,这个包含24次java和5次oracle的文档是最好的。

    alt text

    希望我传达的信息清楚。。。如果没有请问我,我会给更多的信息

    1 回复  |  直到 14 年前
        1
  •  8
  •   Shashikant Kore    14 年前