个人博客:http://demi-panda.com
文档的分值代表了该文档在特定查询词下对应的相关性高低,他关联着信息检索向量空间模型中的向量夹角的接近度。一个文档越与查询词相关,得分越高。分值计算公式如下:
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 in d)
这个值衡量着Term在文档中出现的频率,也就是词频。关键词在文档中出现的次数越多,得分越高,这个值在DefaultSimilarity的计算公式如下(词频的平方根):
tf(t in d) = frequency½
idf(t)
代表着该词的逆词频,这个值衡量了该词在整个文档库中出现的频度。这意味着,一个词出现的越少,根据香农的信息公示,他越珍稀。同时将贡献更多的分值给总
分值。默认的计算公式如下(其中numDocs代表整个文档的数量,docFreq代表了含有Term t的文档数量):
numDocs
idf(t) = 1 + log ( ––––––––– )
docFreq+1
coord(q,d)
这个分值衡量了文档中含有多少Term。文档中出现的越多,越全,将获得越高的分值。举个例来说,查询“lucene”和"Apache",同时出现两个Term的肯定比只出现一个lucene或者Apache的分值高。这个值是搜索时动态计算的,默认的计算公式如下:
coord(q,d) = overlap / maxOverlap
queryNorm(q)
这个标准化因子用于在多个查询器中进行比较。它并不影响文档的排名。它的主要作用在于多个查询器返回的结果进行比较,甚至是结果来自多个索引时。这是搜索时的权重因子,当给查询器设置权重时就是通过这个因子进行影响的。默认的实现公式如下:
1
queryNorm(q) = queryNorm(sumOfSquaredWeights) = ––––––––––––––
sumOfSquaredWeights½
其中的sumOfSquaredWeights的计算公式如下:(可以清晰的看到获取query的boost,当没给查询器设置值时,默认为1,不起作用)
sumOfSquaredWeights = q.getBoost() 2 · ∑ ( idf(t) · t.getBoost() ) 2
t in q
t.getBoost()
该值是一个搜索时权重因子,可以在查询时给不同的Term设置不同的权重,可以通过lucene语法(具体参见我翻译的另外一篇文章:hi.baidu.com/expertsearch/blog/item/8d4f7d355a2e413c5ab5f547.html
),也可以通过setBost()函数,注意,在多Term查询器中,是没有获取单一Term权重的函数的,所以如果需要获取,只能调用相应的子查询器函数的getBoost()函数。
norm(t,d)
封装了一些索引时因子以及长度因子。
Document boost
- 在索引时,添加到Index前可以通过doc.setBoost()设置,衡量了Document的重要程度。.
Field boost
- 在将字段加入到文档前可以通过调用field.setBoost()来设置字段的权重。
lengthNorm(field)
- 该值在将文档添加到索引时,根据所有文档中特定字段的Term数来计算。所以默认更短的字段将贡献更多的分值。
1
lengthNorm(field)
= ––––––––––––––
numTerms½
当文档加入索引时,以上因子将相乘,如果一个文档中有多个同名的字段,那么将多个多同的权重也相乘。
norm(t,d) = doc.getBoost() · lengthNorm(field) · ∏ f.getBoost()
field f in d named as t
可是还有件值得注意的事情,这个值在索引时计算完毕后将编码为一个Byte存储起来,在搜索时,再从文件中读取出该
值并解码成float。在这个过程中,可能会造成精度的缺失,并不能保证decode(encode(x)) =
x,比如,有可能decode(encode(0.89)) =
0.75,同样值得注意的是,在搜索时改变此值已经太晚了。例如,用一个不同于DefaultSimilarity的实现。
相关函数:
setDefault(Similarity), IndexWriter.setSimilarity(Similarity), Searcher.setSimilarity(Similarity)
原文出处:http://hi.baidu.com/expertsearch/blog/item/2a95d7035677e4084afb5121.html
分享到:
相关推荐
为了自定义评分公式,Lucene提供了一些接口,如`similarity`和`similarity.Similarity`。你可以创建自己的相似度类,覆盖这些方法来改变TF、DF或IDF的计算方式,或者添加新的评分因子。例如,你可以实现一个更注重...
**Lucene.NET中文帮助文档详解** Lucene.NET是一款开源全文搜索引擎库,它是Apache Lucene项目在.NET框架下的实现。这个库提供了高级的信息检索服务,包括文本分析、索引和搜索功能,广泛应用于各种需要高效搜索...
搜索则是通过查询解析和评分机制来定位匹配的文档,而结果排序则依据相关性来确定返回给用户的顺序。 2. **API详解** 在Lucene 4.6.0中,主要API包括Analyzer、IndexWriter、Directory、QueryParser、Searcher等。...
默认情况下,Lucene使用TF-IDF相似度计算查询与文档的相关性。TF-IDF是“词频-逆文档频率”的缩写,它重视在少有文档中出现的词项,认为这样的词项更能区分文档。然而,TF-IDF并未考虑文档长度,可能会导致短文档被...
本篇文章将围绕"Lucene-2.0学习文档"的主题,结合Indexer.java、MyScoreDocComparator.java和MySortComparatorSource.java这三个关键文件,深入探讨Lucene的核心概念和实际应用。 首先,我们来看`Indexer.java`。这...
《Apache Lucene 4.6.1 官方文档详解》 Apache Lucene 是一个开源全文搜索引擎库,它为开发者提供了强大的文本搜索功能。在4.6.1这个版本中,Lucene 继续保持着其在信息检索领域的领先地位,提供了一系列优化和改进...
包含翻译后的API文档:lucene-core-7.2.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-core:7.2.1; 标签:apache、lucene、core、中文文档、jar包、java; 使用方法:解压翻译后的API...
3. **文档检索**:根据查询结果,Lucene能够快速返回与查询相关的文档列表,同时提供相关度评分。 4. **排序与高亮**:Lucene不仅可以返回匹配的文档,还能根据相关度进行排序,并对匹配的查询词汇进行高亮显示。 *...
2) 实施近实时搜索,利用Lucene的段合并机制;3) 对索引进行定期优化,以减少碎片;4) 根据需求选择合适的评分算法,如TF-IDF或BM25。 最后,应对中文搜索的挑战,比如歧义、同音词和多音字,可能需要引入更复杂的...
**Lucene.net学习帮助文档** Lucene.net是一个开源全文搜索引擎库,它是Apache Lucene项目的一部分,专门针对.NET Framework进行了优化。这个压缩包包含了Lucene.net的源码和中文学习文档,旨在帮助开发者深入理解...
**Lucene文档笔记详解** Lucene,源自Apache软件基金会4 Jakarta项目组,是一个备受开发者青睐的开源全文检索引擎工具包。它提供了强大的文本分析、索引构建和搜索功能,但值得注意的是,Lucene本身并不包含完整的...
`Similarity` 类是 Lucene 中用于计算评分的核心接口,包含了诸如 `lengthNorm`(字段长度规范化)、`tf`(词频)、`idf`(逆文档频率)等关键方法。 例如,假设我们需要为最近发布的文档赋予更高的评分,可以这样...
7. **API详解**:文档涵盖了Lucene的主要类和接口,如IndexWriter用于创建和更新索引,Directory作为索引的存储容器,IndexReader用于读取索引,以及Searcher用于执行搜索等。 8. **示例代码**:文档中包含了丰富的...
**Lucene 3.0 API 中文帮助文档详解** Lucene 是一个开源的全文检索库,由Apache软件基金会开发并维护。它提供了高级的文本搜索功能,被广泛应用于各种信息检索系统。本篇将深入探讨Lucene 3.0 API的中文帮助文档,...
### Lucene开发详解 #### 一、Lucene简介 Lucene是一个高性能、全功能的文本搜索引擎库,由Doug Cutting创建并捐赠给Apache Software Foundation。它主要用于构建全文搜索应用程序,能够帮助开发者快速地在其应用...
iTextPDFExtractor.java ------ ...--PDFBox创建PDF文件的Lucene索引 PDFBoxPathIndex.java ------- --PDFBox创建指定目录PDF文档索引 POIOfficeExtractor.java ----- -- POI处理Excel和Word文档代码
首先,`lucene2.3API中文文档.chm`是针对Lucene 2.3版本的中文API文档,这为中文开发者提供了便利,帮助他们理解并使用这个版本的Lucene。在文档中,你可以找到关于Lucene核心组件的详细信息,如Analyzer(分析器)...
包含翻译后的API文档:lucene-core-7.7.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-core:7.7.0; 标签:apache、lucene、core、中文文档、jar包、java; 使用方法:解压翻译后的API...
默认的排序依据是文档的相关性分数(由`Similarity`和`TF-IDF`算法计算得出)。用户还可以自定义评分函数以适应特定的业务场景。 6. **近实时搜索** 通过NRT(Near Real Time)机制,Lucene能够迅速反映索引的最新...
- **评分函数(Scoring)**: Lucene使用TF-IDF等算法来计算文档的相关性分数。 - **高亮(Highlighting)**: Lucene提供Highlighter类,用于在搜索结果中突出显示匹配的部分。 ### 4. 应用场景 Lucene广泛应用于...