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):
标准化因子,它包括三个参数:
-
Document boost:
此值越大,说明此文档越重要。
-
Field boost:
此域越大,说明此域越重要。
-
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。
计算这个评分涉及到几个核心的类/接口:Similarity、Query、Weight、Scorer、Searcher,由它们或其子类来完成评分的计算。
http://my.oschina.net/MrMichael/blog/362318
相关推荐
### Lucene3源码分析知识点概述 #### 一、全文检索的基本原理 ##### 1. 总论 全文检索系统是一种高效的信息检索技术,能够帮助用户在海量文档中快速找到包含特定关键词的信息。Lucene是Java领域内最受欢迎的全文...
本压缩包包含的是Lucene 3.5.0版本的全部源码,对于想要深入理解Lucene工作原理、进行二次开发或者进行搜索引擎相关研究的开发者来说,是一份非常宝贵的学习资源。 Lucene 3.5.0是Lucene的一个重要版本,它在3.x...
通过学习Lucene源码,我们可以定制自己的分词器、查询解析器,甚至优化搜索算法,以满足特定的搜索需求。例如,在中文环境下,可以使用IK Analyzer或者jieba分词库来增强对中文的支持。 总结,Lucene作为Java平台上...
《深入剖析Lucene 5.0源码》 Lucene是一个高性能、全文检索库,它为Java开发者提供了在应用程序中实现全文检索功能的工具。在本文中,我们将深入探讨Lucene 5.0的源码,揭示其核心设计思想与工作原理,帮助读者更好...
《深入剖析Lucene.NET 2.9.1:源码解析与应用开发》 Lucene.NET 2.9.1是开源搜索引擎库Lucene的.NET版本,它为.NET开发者提供了强大的全文检索和索引功能。这个版本的源码提供了一个宝贵的资源,帮助我们理解其内部...
Lucene.Net 的源码结构清晰,分为多个模块,如索引、查询解析、分词器等,每个模块都有明确的职责。源码主要由 C# 编写,遵循面向对象的设计原则,包括封装、继承和多态。通过阅读源码,开发者可以深入了解搜索引擎...
为了调试Lucene源码,我们需要在代码中设置断点,然后启动调试模式。 1. 在需要调试的代码行号前单击,会出现一个红点,表示设置了断点。 2. 右键点击项目,选择“Run As” -> “Java Application”。 3. Eclipse将...
本文将深入探讨Lucene的评分公式,理解其工作原理,并探讨如何通过自定义评分公式来影响搜索结果的排序。 首先,我们要了解Lucence默认的评分公式,这是TF-IDF(Term Frequency - Inverse Document Frequency)的...
lucene3.0.3源码和教程
《深入剖析Lucene华电项目源码》 在IT领域,搜索引擎技术是不可或缺的一部分,而Apache Lucene作为一款开源的全文检索库,被广泛应用在各种信息检索系统中。本文将结合“lucene 华电项目 源码”,深度解析Lucene的...
lucene3.5源码。 方便开发人员对lucene进行扩展
《Lucene5源码教程:拼音检索与分词器实战》 在当今的信息化社会,搜索引擎已经成为我们获取信息的重要工具。Lucene,作为Apache软件基金会的开源全文检索库,为开发者提供了强大的文本检索功能。本教程将深入探讨...
《Lucene实战源码》是一本深入探讨Apache Lucene搜索引擎库的书籍,其配套的光盘代码包含了书中各个章节的示例和实验项目。Lucene是Java开发的全文搜索引擎库,广泛应用于各种信息检索和文本分析场景。通过研究这...
Lucene.NET是一个基于Apache Lucene的开源搜索引擎库,专门为.NET Framework设计。它提供了高性能、全文本搜索的能力,并且完全用C#重写了原始的Java版本,使其能够无缝集成到.NET应用程序中。这个压缩包包含的是...
Lucene是Apache软件基金会下的一个项目,它是一个高性能、全文本搜索库,完全用Java编写。作为一款开源的全文检索工具包,...通过学习和使用Lucene源码,你可以更深入地理解全文检索的工作机制,提升自己的开发技能。
《深入剖析Lucene 7.3源码》 Lucene是一个高性能、全文检索库,它由Apache软件基金会开发并维护,被广泛应用于各种搜索引擎和信息检索系统中。Lucene 7.3是其一个重要的版本,它在前一版本的基础上进行了一系列的...
文件"lucene.155"很可能是一个特定版本的Lucene源码压缩包,版本号可能是1.55。源码阅读是理解任何软件内部工作原理的最好方式,通过研究Lucene的源码,我们可以深入了解其内部的数据结构、算法实现以及优化技巧。...
**Lucene.Net 2.3 源码详解** Lucene.Net 是 Apache Lucene 的 .NET 实现,它是一个高性能、全文本搜索库,适用于 .NET 开发者。这个版本是 2.3,是最新的版本,包含了丰富的功能和优化。通过分析其源码,我们可以...
**Lucene 源码详解** Lucene 是一个开源的全文检索库,由 Apache 软件基金会开发...通过深入学习和研究Lucene源码,开发者不仅可以掌握其工作原理,还能充分利用这个强大工具构建出高性能、高度定制化的全文搜索引擎。
《Lucene实战源码(Lucene in Action Source Code)part1》是针对知名图书《Lucene in Action》的源代码,这部分主要涵盖了Lucene搜索引擎库的基础应用和核心概念。Lucene是一个高性能、全文本搜索库,它允许开发者...