`
m635674608
  • 浏览: 5029165 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Lucene评分源码调研

 
阅读更多

Lucene Scoring 评分公式:

 

 

score(q,d) = coord(q,d) · queryNorm(q) · ∑  ( tf(t in d) · idf(t)2 · t.getBoost() · norm(t,d) ) 

 

1.    公式详解:

coord(q , d)

一次搜索可能包含多个搜索词,而一篇文档中也可能包含多个搜索词,此项表示,当一篇文档中包含的搜索词越多,则此文档则打分越高。 

评分因子,是基于文档中出现查询项的个数。越多的查询项在一个文档中,说明些文档的匹配程序越高。默认是出现查询项的百分比。

queryNorm(q)

计算每个查询条目的方差和,此值并不影响排序,而仅仅使得不同的query之间的分数可以比较。其公式如下: 

         

tf(t in d)

Term t在文档d中出现的词频

idf(t)

Term t在几篇文档中出现过

norm(t, d)

         

标准化因子,它包括三个参数:

  1. Document boost

此值越大,说明此文档越重要。 

  1. Field boost

此域越大,说明此域越重要。 

  1. lengthNorm(field) = (1.0 / Math.sqrt(numTerms))

一个域中包含的Term总数越多,也即文档越长,此值越小,文档越短,此值越大。 

在做索引的时候由 Similarity.lengthNorm 计算。

                   

 

2. 公式原理推导:

首先,将以上各部分代入score(q, d)公式,将得到一个非常复杂的公式,让我们忽略所有的boost,因为这些属于人为的调整,也省略coord,这和公式所要表达的原理无关。得到下面的公式:

 

 

索引的时候 norm 值压缩(encode)成一个 byte 保存在索引中。搜索的时候再把索引中 norm 值解压(decode)成一个 float 值,这个 encode/decode  Similarity 提供。官方说:这个过程由于精度问题,以至不是可逆的,如:decode(encode(0.89)) = 0.75

         计算这个评分涉及到几个核心的类/接口:SimilarityQueryWeightScorerSearcher,由它们或其子类来完成评分的计算。

 

 

 

 

 

http://my.oschina.net/MrMichael/blog/362318

分享到:
评论

相关推荐

    lucene3源码分析

    ### Lucene3源码分析知识点概述 #### 一、全文检索的基本原理 ##### 1. 总论 全文检索系统是一种高效的信息检索技术,能够帮助用户在海量文档中快速找到包含特定关键词的信息。Lucene是Java领域内最受欢迎的全文...

    Lucene3.5源码jar包

    本压缩包包含的是Lucene 3.5.0版本的全部源码,对于想要深入理解Lucene工作原理、进行二次开发或者进行搜索引擎相关研究的开发者来说,是一份非常宝贵的学习资源。 Lucene 3.5.0是Lucene的一个重要版本,它在3.x...

    Lucene学习源码.rar

    通过学习Lucene源码,我们可以定制自己的分词器、查询解析器,甚至优化搜索算法,以满足特定的搜索需求。例如,在中文环境下,可以使用IK Analyzer或者jieba分词库来增强对中文的支持。 总结,Lucene作为Java平台上...

    lucene5.0源码包

    《深入剖析Lucene 5.0源码》 Lucene是一个高性能、全文检索库,它为Java开发者提供了在应用程序中实现全文检索功能的工具。在本文中,我们将深入探讨Lucene 5.0的源码,揭示其核心设计思想与工作原理,帮助读者更好...

    lucene.net 2.9.1 源码

    《深入剖析Lucene.NET 2.9.1:源码解析与应用开发》 Lucene.NET 2.9.1是开源搜索引擎库Lucene的.NET版本,它为.NET开发者提供了强大的全文检索和索引功能。这个版本的源码提供了一个宝贵的资源,帮助我们理解其内部...

    Lucene.Net源码与说明文档

    Lucene.Net 的源码结构清晰,分为多个模块,如索引、查询解析、分词器等,每个模块都有明确的职责。源码主要由 C# 编写,遵循面向对象的设计原则,包括封装、继承和多态。通过阅读源码,开发者可以深入了解搜索引擎...

    lucene 2.4.1源码在eclipse调试运行通过

    为了调试Lucene源码,我们需要在代码中设置断点,然后启动调试模式。 1. 在需要调试的代码行号前单击,会出现一个红点,表示设置了断点。 2. 右键点击项目,选择“Run As” -> “Java Application”。 3. Eclipse将...

    lucene评分公式详解

    本文将深入探讨Lucene的评分公式,理解其工作原理,并探讨如何通过自定义评分公式来影响搜索结果的排序。 首先,我们要了解Lucence默认的评分公式,这是TF-IDF(Term Frequency - Inverse Document Frequency)的...

    lucene源码和教程

    lucene3.0.3源码和教程

    lucene 华电项目 源码

    《深入剖析Lucene华电项目源码》 在IT领域,搜索引擎技术是不可或缺的一部分,而Apache Lucene作为一款开源的全文检索库,被广泛应用在各种信息检索系统中。本文将结合“lucene 华电项目 源码”,深度解析Lucene的...

    lucene3.5.0源码

    lucene3.5源码。 方便开发人员对lucene进行扩展

    lucene5 源码教程

    《Lucene5源码教程:拼音检索与分词器实战》 在当今的信息化社会,搜索引擎已经成为我们获取信息的重要工具。Lucene,作为Apache软件基金会的开源全文检索库,为开发者提供了强大的文本检索功能。本教程将深入探讨...

    lucene实战源码.rar

    《Lucene实战源码》是一本深入探讨Apache Lucene搜索引擎库的书籍,其配套的光盘代码包含了书中各个章节的示例和实验项目。Lucene是Java开发的全文搜索引擎库,广泛应用于各种信息检索和文本分析场景。通过研究这...

    Lucene.net源码及中文文档

    Lucene.NET是一个基于Apache Lucene的开源搜索引擎库,专门为.NET Framework设计。它提供了高性能、全文本搜索的能力,并且完全用C#重写了原始的Java版本,使其能够无缝集成到.NET应用程序中。这个压缩包包含的是...

    lucene源码和程序

    Lucene是Apache软件基金会下的一个项目,它是一个高性能、全文本搜索库,完全用Java编写。作为一款开源的全文检索工具包,...通过学习和使用Lucene源码,你可以更深入地理解全文检索的工作机制,提升自己的开发技能。

    lucene 7.3源码

    《深入剖析Lucene 7.3源码》 Lucene是一个高性能、全文检索库,它由Apache软件基金会开发并维护,被广泛应用于各种搜索引擎和信息检索系统中。Lucene 7.3是其一个重要的版本,它在前一版本的基础上进行了一系列的...

    Lucene项目的文档和源码

    文件"lucene.155"很可能是一个特定版本的Lucene源码压缩包,版本号可能是1.55。源码阅读是理解任何软件内部工作原理的最好方式,通过研究Lucene的源码,我们可以深入了解其内部的数据结构、算法实现以及优化技巧。...

    Lucene.Net2.3源码,最新版

    **Lucene.Net 2.3 源码详解** Lucene.Net 是 Apache Lucene 的 .NET 实现,它是一个高性能、全文本搜索库,适用于 .NET 开发者。这个版本是 2.3,是最新的版本,包含了丰富的功能和优化。通过分析其源码,我们可以...

    Lucene源码

    **Lucene 源码详解** Lucene 是一个开源的全文检索库,由 Apache 软件基金会开发...通过深入学习和研究Lucene源码,开发者不仅可以掌握其工作原理,还能充分利用这个强大工具构建出高性能、高度定制化的全文搜索引擎。

    Lucene实战源码(Lucene in Action Source Code)part1

    《Lucene实战源码(Lucene in Action Source Code)part1》是针对知名图书《Lucene in Action》的源代码,这部分主要涵盖了Lucene搜索引擎库的基础应用和核心概念。Lucene是一个高性能、全文本搜索库,它允许开发者...

Global site tag (gtag.js) - Google Analytics