摘自forfuture1978的lucene系列文章,以供特别理解标准化因子
为什么会有标准化因子呢?从第一章中的描述,我们知道,在搜索过程中,搜索出的文档要按与查询语句的相关性排序,相关性大的打分(score)高,从而排在前面。相关性打分(score)使用向量空间模型(Vector Space Model),在计算相关性之前,要计算Term Weight,也即某Term相对于某Document的重要性。在计算Term Weight时,主要有两个影响因素,一个是此Term在此文档中出现的次数,一个是此Term的普通程度。显然此Term在此文档中出现的次数越多,此Term在此文档中越重要。
这种Term Weight的计算方法是最普通的,然而存在以下几个问题:
- 不同的文档重要性不同。有的文档重要些,有的文档相对不重要,比如对于做软件的,在索引书籍的时候,我想让计算机方面的书更容易搜到,而文学方面的书籍搜索时排名靠后。
- 不同的域重要性不同。有的域重要一些,如关键字,如标题,有的域不重要一些,如附件等。同样一个词(Term),出现在关键字中应该比出现在附件中打分要高。
- 根据词(Term)在文档中出现的绝对次数来决定此词对文档的重要性,有不合理的地方。比如长的文档词在文档中出现的次数相对较多,这样短的文档比较吃亏。比如一个词在一本砖头书中出现了10次,在另外一篇不足100字的文章中出现了9次,就说明砖头书应该排在前面码?不应该,显然此词在不足100字的文章中能出现9次,可见其对此文章的重要性。
由于以上原因,Lucene在计算Term Weight时,都会乘上一个标准化因子(Normalization Factor),来减少上面三个问题的影响。
标准化因子(Normalization Factor)是会影响随后打分(score)的计算的,Lucene的打分计算一部分发生在索引过程中,一般是与查询语句无关的参数如标准化因子,大部分发生在搜索过程中,会在搜索过程的代码分析中详述。
标准化因子(Normalization Factor)在索引过程总的计算如下:
它包括三个参数:
- Document boost:此值越大,说明此文档越重要。
- Field boost:此域越大,说明此域越重要。
- lengthNorm(field) = (1.0 / Math.sqrt(numTerms)):一个域中包含的Term总数越多,也即文档越长,此值越小,文档越短,此值越大。
从上面的公式,我们知道,一个词(Term)出现在不同的文档或不同的域中,标准化因子不同。比如有两个文档,每个文档有两个域,如果不考虑文档长度,就有四种排列组合,在重要文档的重要域中,在重要文档的非重要域中,在非重要文档的重要域中,在非重要文档的非重要域中,四种组合,每种有不同的标准化因子。
于是在Lucene中,标准化因子共保存了(文档数目乘以域数目)个,格式如下:
- 标准化因子文件(Normalization Factor File: nrm):
- NormsHeader:字符串“NRM”外加Version,依Lucene的版本的不同而不同。
- 接着是一个数组,大小为NumFields,每个Field一项,每一项为一个Norms。
- Norms也是一个数组,大小为SegSize,即此段中文档的数量,每一项为一个Byte,表示一个浮点数,其中0~2为尾数,3~8为指数。
分享到:
相关推荐
而 Luck 是 Lucene 的一个可视化工具,版本为 6.5.0,它为 Lucene 的索引提供了直观的界面,帮助用户更好地理解和调试 Lucene 索引。 Luck 可视化工具的主要特性包括: 1. **索引浏览器**:Luck 允许用户浏览 ...
lucene,lucene教程,lucene讲解。 为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store....
此外,Lucene 还提供了 coord、queryNorm、norm 等评分因子,以便进一步调整文档的分数。这些评分因子可以根据需要进行调整,以实现自定义的排序算法。 Lucene 的排序算法是基于 tf-idf 模型的,通过 tf、idf、...
- **其他信息**:例如标准化因子和删除文档信息。 #### 四、Lucene索引过程分析 Lucene的索引过程是一个复杂而有序的操作流程,主要步骤如下: - **1. 创建IndexWriter对象**:初始化索引写入器。 - **2. 创建...
lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0
在开发过程中,为了更好地理解和调试Lucene索引,开发者通常会使用一些辅助工具,其中之一就是"Lucene可视化工具"。这个工具允许用户直观地查看Lucene索引的结构和内容,包括分词结果、字段信息以及文档详情。 **...
**Lucene 索引图形化界面工具 LukeAll 3.5~4.0** Lucene 是一个开源的全文搜索引擎库,它提供了强大的文本搜索功能,但其本身的接口设计是命令行或者编程式的,对于非开发人员或者在调试索引时可能会显得不太友好。...
《教你运用Lucene算法》 Lucene是一款强大的全文搜索引擎库,它提供了丰富的信息检索功能,包括文本分析、索引构建、搜索以及结果排名等。在深入理解Lucene的工作原理时,我们首先要关注的是其核心算法。 一、单个...
在SpringBoot中,我们需要配置Lucene的初始化。我们将创建一个Bean类,用于实例化IndexWriter和IndexSearcher。 IndexWriter用于创建索引,而IndexSearcher用于搜索索引。 在配置中,我们需要注意以下几点: * ...
Lucene是一款强大的全文搜索引擎库,广泛应用于各种数据检索场景。在C#环境下,利用Lucene进行时间区间搜索是提高数据检索效率和精确度的重要手段。本篇将深入探讨如何在C#中实现Lucene的时间区间查询匹配,以及涉及...
【Lucene 4.7.0 全套JAR包详解】 Lucene是一个开源全文搜索引擎库,由Apache软件基金会开发并维护。它提供了一个高级、灵活的文本搜索API,允许开发者轻松地在应用程序中实现复杂的搜索功能。这次提供的“lucene-...
- `Analyzer`:用于分词和标准化文本,如去除停用词、词干提取等。Lucene提供了一些内置的Analyzer,如StandardAnalyzer,也可以自定义Analyzer以适应特定的语言或需求。 - `Document`:表示一个待索引的文档,...
《Lucene in Action》是关于Apache Lucene的权威指南,这本书深入浅出地介绍了全文搜索引擎的构建和优化。Lucene是一个高性能、全文本搜索库,它允许开发人员在应用程序中轻松实现复杂的搜索功能。这本书主要面向...
段合并器执行合并存储域、合并标准化因子、合并词向量以及合并词典和倒排表等操作。 此外,Lucene的搜索过程包括对索引的搜索和对查询语句的处理。搜索过程中要对索引进行词法分析、语法分析和语言处理,然后根据...
Lucene内置了多种Analyzer,如标准Analyzer、简体中文Analyzer等,可按需求选择。 5. **Query**: 用户输入的搜索条件,通过Analyzer转化为可匹配索引的词项。 6. **Searcher**: 执行查询并返回结果的组件,使用倒...
“my的jar包”通常指的是开发人员自定义的扩展或封装,可能包含了对Lucene原生功能的增强或者针对特定需求的定制化处理。这些jar包可能包含自定义的分析器、查询解析器、过滤器等,是开发者根据实际项目需求进行的二...
它包括词项分割、标准化(如去除停用词、词干提取)等步骤。在Lucene 2.3.2中,你可以看到不同的Analyzer实现,如StandardAnalyzer、SimpleAnalyzer等,它们有不同的文本处理策略。 2. 索引(Index):Lucene通过...
本压缩包包含的是Lucene 3.5.0版本的全部源码,对于想要深入理解Lucene工作原理、进行二次开发或者进行搜索引擎相关研究的开发者来说,是一份非常宝贵的学习资源。 Lucene 3.5.0是Lucene的一个重要版本,它在3.x...
Lucene能够处理任何类型的文本数据,包括Word、Excel、PDF、数据库和HTML文档,只需通过解析转换器将其转换成标准的中间格式(如XML),即可进行数据索引。Lucene还支持对中文检索的支持,通过扩展其语言词法分析...
论文中使用了Nutch/Lucene来实现非结构化数据的检索。Nutch是一个爬虫工具,可以从互联网上爬取大量的网页,然后使用Lucene搜索引擎来对这些网页进行索引和搜索。 向上扩展vs向外扩展 论文中比较了向上扩展和向...