针对lucene检索结果进行排序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Lucene3.0之结果排序(原理篇)
传统上,人们将信息检索系统返回结果的排序称为"相关排序" ( relevance ranking),隐含其中各条目的顺序反映结果和查询的相关程度。
1、基本排序原理
①向量空间模型
Gerald Salton 等在 30 多年前提出的"向量空间模型" ( Vector Space Model, VSM) [Salton and Lesk,1968, Salton,1971]。该模型的基础是如下假设:文档 d和查询 q的相关性可以由它们包含的共有词汇情况来刻画。
经典的 TF*IDF词项权重的计算公式:
给定某种权重的定量设计,求文档和查询的相关性就变成了
求 d 和 q 向量的
某种距离,最常用的是余弦( cos)距离
②链接分析 PageRank原理
链接分析技术主要基于两个假设: 1)一个网页被多次引用,则它可能是很重要的,如果被重要的网页引用,说明自身也是重要的,网页的重要性在网页之间可以传递。
2)随机冲浪模型:认为假定用户一开始随机地访问网页集合中的一个网页,然和跟随网页的链接向前浏览网页,不会退浏览,那么浏览下一个网页的概率是被浏览网页的量化的重要程度值。
按照以上的用户行为模型,每个网页可能被访问到的次数越多就越重要,这样的"可能被访问的次数"也就定义为网页的权值, PageRank值。如何计算这个权值呢? PageRank采用以下公式进行计算:
其中wj代表第 j个网页的权值;lij只取 0、 1值,代表从网页 i到网页 j 是否存在链接;ni代表网页 i有多少个连向其它网页的链接; d代表"随机冲浪"中沿着链接访问网页的平均次数。选择合适的初始数值,递归的使用上述公式,即可得到理想的网页权值。
2、 Lucene排序计算公式
Lucene的排序公式如下:
1),协调因子,表示文档( d)中 Term(t)出现的百分比,也就
是计算查询条件( q)中不同 Term(t),以及在文档中出现的数量之和,两者的数量之比。通常在文档中出现查询 Term种类越多,分值越高。
2),调节因子,不影响索引排序情况,只在检索时使用,主要是
用来让排序结果在不同的查询条件之间可以比较。这个条件是在搜索时候计算。数值是根据每一个查询项权重的平方和计算得到。计算公式如下:
3) ,文档频率,表示查询词中,每个 Term在对应的结果文档中 (d)
中出现的次数。查询词出现的次数越多,表示出现频率越高,文档的检索得分就越高。为了避免获得更大的相关性函数,实际中,使用次数的平方跟作为文档频率 tf的值,避免数值过度放大。
4) ,逆文档频率,检索匹配文档数量的反向函数。按照信息理论,文档
出现的次数越少,每一篇文档的信息量就会越大。所以匹配的文档数越少,得分就越高。而索引库中文档总数越多,找到一篇目标文档难度越大,相应的信息量也会比较大。
5) ,长度因子,每个索引词汇在域中的总体长度决定的,这个参数在
索引建立时确定。数值根据文档中实际具有的索引项个数确定。检索词长度在文档总长度中占的比例越大,长度因子的数值也越大。
Lucene3.0之结果排序(操作篇)
1、 Lucene相关排序流程
2、 Lucene相关类
① Query类:一个抽象类, Lucene检索结果最终评分的总控制中心。其它评分有关的类和对
象都是由 Query类来管理和生产。
② Weight类接口:定义 Query权重计算的一个实现接口,可以被重用。 Weight类可以用来
生成 Scorer类,也可以解析评分的详细信息,另外还定义了获取 Query权值的方法。
③ Scorer类: Lucene评分机制的核心类。类的定义是抽象类,提供的一些抽象基本的计分
功能方法提供所有的评分类实现,同时还定义了评分的详细解析方法, Scorer类内部有一个
Similarity对象,用来指明计算公式。
④ Scorer类: Lucene相似度计算的核心抽象类。 Similarity类主要处理评分计算,系统
缺省使用类 DefaultSimilarity类对象
3、排序控制
使用 Sort对象定制排序,通过改变文档 Boost值来改变排序结果以及使用自定义的 Similarity方法更改排序
4、文档 Boost加权排序
① Boost是指索引建立过程中,给整篇文档或者文档的某一特定域设定的权值因子,在检索
时,优先返回分数高的。
Document和 Field两重 Boosting参数。通过 Document对象的 setBoost()方法和 Field对象的 setBoost()方法。不同在于前者对文档中每一个域都修改了参数,而后者只针对指定域进行修改。
文档加权 =Document-boosting*Field-boosting,默认情况下为 1,一般不做修改。
② Sort对象检索排序
Sort使用时通过实例化对象作为参数,通过 Searcher类的 search接口来实现。Sort支持的排序功能以文档当中的域为单位,通过这种方法,可以实现一个或者多个不同域的多形式的值排序。
实际使用排序对象 Sort进行排序。主要有两种模式,一种是以字符串表示文档域的名称作为参数指定域排序,一种是直接以排序域的包装域的包装类作为参数进行排序。
Sort对象使用比较简单,只需要在对文档索引进行检索时,在检索器的 Search 方法中带 Sort对象作为参数即可。
1) Sort对象相关性排序
按照相关性排序时最基本的结果排序方法,使用 Sort对象无参数构造函数完成的排序效果相当于 Lucene默认的按相关性降序排序。
2) Sort对象文档编号排序
某些应用场合需要对所有符合匹配度的结果,按照文档内部编号排序输出。使用Sort对象的静态实例 Sort.INDEXORDER来实现
3) Sort对象独立域排序
在检索过程中,把检索结果按照某一个特定域排序,非常重要。在使用搜索引擎过程中,有时会选择使用时间排序,而在搜索引擎库中,检索词完全是另外一个域的内容,与时间没有任何关系。这种应用中,检索关键词的匹配仍然是首