针对lucene检索结果进行排序

上传人:z****2 文档编号:184208422 上传时间:2023-02-01 格式:DOCX 页数:10 大小:41.95KB
收藏 版权申诉 举报 下载
针对lucene检索结果进行排序_第1页
第1页 / 共10页
针对lucene检索结果进行排序_第2页
第2页 / 共10页
针对lucene检索结果进行排序_第3页
第3页 / 共10页
资源描述:

《针对lucene检索结果进行排序》由会员分享,可在线阅读,更多相关《针对lucene检索结果进行排序(10页珍藏版)》请在装配图网上搜索。

1、Lucene3.0 之结果排序(原理篇)传统上,人们将信息检索系统返回结果的排序称为相关排序 ( relevance ranking) ,隐含其中各条目的顺序反映结果和查询的相关程度。1、基本排序原理 向量空间模型Gerald Salton 等在 30 多年前提出的向量空间模型 ( Vector SpaceModel, VSM) Sa lt on and Lesk,1968, Sal to n,1971。该模型的基础是如下 假设:文档 d 和查询 q 的相关性可以由它们包含的共有词汇情况来刻画。经典的 TF*IDF 词项权重的计算公式:给定某种权重的定量设计,求文档和查询的相关性就变成了 求

2、d 和 q 向量的某种距离,最常用的是余弦(cos)距离 链接分析 PageRank 原理链接分析技术主要基于两个假设: 1)一个网页被多次引用,则它可能是很重要 的,如果被重要的网页引用,说明自身也是重要的,网页的重要性在网页之间可 以传递。2)随机冲浪模型:认为假定用户一开始随机地访问网页集合中的一个网页,然 和跟随网页的链接向前浏览网页,不会退浏览,那么浏览下一个网页的概率是被 浏览网页的量化的重要程度值。按照以上的用户行为模型,每个网页可能被访问到的次数越多就越重要,这样的 可能被访问的次数也就定义为网页的权值, PageRank 值。如何计算这个权值 呢? PageRank 采用以下

3、公式进行计算:叫二(1-十占 2 -其中wj代表第j个网页的权值;lij只取0、1值,代表从网页i到网页j 是否存在链接; ni 代表网页 i 有多少个连向其它网页的链接; d 代表随机冲 浪中沿着链接访问网页的平均次数。选择合适的初始数值,递归的使用上述公 式,即可得到理想的网页权值。2、Lucene 排序计算公式Lucene 的排序公式如下:Scare(qd)二 card沢queryNormig)x丫 (if (tind) xidf (f)2 x t.getBoost) xnorm(t,d)1)sg协调因子,表示文档(d)中Term( t)出现的百分比,也就是计算查询条件(q)中不同Ter

4、m(t),以及在文档中出现的数量之和,两 者的数量之比。通常在文档中出现查询 Term 种类越多,分值越高。2)护驻恥(g),调节因子,不影响索引排序情况,只在检索时使用,主要是 用来让排序结果在不同的查询条件之间可以比较。这个条件是在搜索时候计算。 数值是根据每一个查询项权重的平方和计算得到。计算公式如下:QliEFyNcrF 肥二 j1=3战血*刃,文档频率,表示查询词中,每个Term在对应的结果文档中(d) 中出现的次数。查询词出现的次数越多,表示出现频率越高,文档的检索得分就 越高。为了避免获得更大的相关性函数,实际中,使用次数的平方跟作为文档频 率 tf 的值,避免数值过度放大。4)

5、研,逆文档频率,检索匹配文档数量的反向函数。按照信息理论,文档 出现的次数越少,每一篇文档的信息量就会越大。所以匹配的文档数越少,得分 就越高。而索引库中文档总数越多,找到一篇目标文档难度越大,相应的信息量 也会比较大。5小,长度因子,每个索引词汇在域中的总体长度决定的,这个参数在 索引建立时确定。数值根据文档中实际具有的索引项个数确定。检索词长度在文档总长度中占的比例越大,长度因子的数值也越大。,d)=d.getBoosiQxleg.hNomeld)x 口 f,gtBoost()Lucene3.0 之结果排序(操作篇)1、 Lucene 相关排序流程2、 Lucene 相关类 Query 类

6、:一个抽象类, Lucene 检索结果最终评分的总控制中心。其它评分有关的类和对 象都是由 Query 类来管理和生产。 Weight 类接口:定义 Query 权重计算的一个实现接口,可以被重用。 Weight 类可以用来 生成 Scorer 类,也可以解析评分的详细信息,另外还定义了获取 Query 权值的方法。 Scorer 类: Lucene 评分机制的核心类。类的定义是抽象类,提供的一些抽象基本的计分 功能方法提供所有的评分类实现,同时还定义了评分的详细解析方法, Scorer 类内部有一个 Similarity 对象,用来指明计算公式。 Scorer 类: Lucene 相似度计算

7、的核心抽象类。 Similarity 类主要处理评分计算,系统 缺省使用类 DefaultSimilarity 类对象3、排序控制使用 Sort 对象定制排序,通过改变文档 Boost 值来改变排序结果以及使用自定 义的 Similarity 方法更改排序4、文档 Boost 加权排序 Boost 是指索引建立过程中,给整篇文档或者文档的某一特定域设定的权值因子,在检索 时,优先返回分数高的。Document 和 Field 两重 Boos ting 参数。通过 Document 对象的 set Boos t()方 法和Field对象的set Boos t()方法。不同在于前者对文档中每一个域

8、都修改了 参数,而后者只针对指定域进行修改。文档加权二Documen t- boos ting* Field-boos ting,默认情况下为1,一般不做修 改。 Sort 对象检索排序Sort 使用时通过实例化对象作为参数,通过 Searcher 类的 search 接口来实现。 Sort 支持的排序功能以文档当中的域为单位,通过这种方法,可以实现一个或 者多个不同域的多形式的值排序。实际使用排序对象 Sort 进行排序。主要有两种模式,一种是以字符串表示文档 域的名称作为参数指定域排序,一种是直接以排序域的包装域的包装类作为参数 进行排序。Sort 对象使用比较简单,只需要在对文档索引进行

9、检索时,在检索器的 Search 方法中带 Sort 对象作为参数即可。1) Sort 对象相关性排序按照相关性排序时最基本的结果排序方法,使用Sort对象无参数构造函数完成 的排序效果相当于Lucene默认的按相关性降序排序。2) Sort 对象文档编号排序 某些应用场合需要对所有符合匹配度的结果,按照文档内部编号排序输出。使用 Sort 对象的静态实例 Sort.INDEXORDER 来实现3) Sort 对象独立域排序在检索过程中,把检索结果按照某一个特定域排 序,非常重要。在使用搜索引 擎过程中,有时会选择使用时间排序,而在搜索引擎库中,检索词完全是另外一 个域的内容,与时间没有任何关

10、系。这种应用中,检索 关键词的匹配仍然是首 要因素,匹配太低或者不匹配的文档直接不必处理,而匹配的文档则需进一步排 序输出。指定的排序域并没有进行特别限制,可以是检索词的关联域,也可以是文档 中的任意其它域。4) Sort 对象联合域排序多个文档域联合排序时,需要注意文档域的添加次序。排序的结果先按照第一个 域排序,然后第二个域作为次要关键字排序。开发时,需要根据自己的需要选择 合适的次序。5) Sort 对象逆向排序Sortfield, true)或者 Sort(field,false)实现升降序排序。Lucene3.0 之结果排序(示例篇)这个例子是根据开发自己的搜索引擎: Lucene2

11、.0+Heritrix 中的例子改 的,由于原书中是使用 Lucene2.0 ,所以代码有部分改动。package sortApp;import java.io.File;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.ind

12、ex.Term;import org.apache.lucene.index.IndexWriter.MaxFieldLength;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.ScoreDoc;import org.apache.lucene.search.Sort;import org.apache.lucene.search.TermQuery;import org.apache.lucene.store.Directory;import org.apache.lucene.st

13、ore.FSDirectory;import org.apache.lucene.util.Version;public class SortTest public static void makeItem(IndexWriter writer, String bookNumber,String bookName, String publishDate) throws Exception writer.setUseCompoundFile(false);Document doc = new Document();Field f1 = new Field(bookNumber, bookNumb

14、er, Field.Store.YES,Field.Index.NOT_ANALYZED);Field f2 = new Field(bookName, bookName, Field.Store.YES,Field.Index.ANALYZED);Field f3 = new Field(publishDate, publishDate, Field.Store.YES,Field.Index.NOT_ANALYZED);doc.add(f1);doc.add(f2);doc.add(f3);writer.addDocument(doc);public static void main(St

15、ring args) String Index_Store_Path = D:/index/1;File file = new File(Index_Store_Path);try Directory Index = FSDirectory.open(file);IndexWriter writer = new IndexWriter(Index, new StandardAnalyzer(Version.LUCENE_CURRENT), true,MaxFieldLength.LIMITED); writer.setUseCompoundFile(false);Document doc1 =

16、 new Document();Field f11 = new Field(bookNumber, 0000001, Field.Store.YES, Field.Index.NOT_ANALYZED);Field f12 = new Field(bookName, 钢铁是怎样炼成的 , Field.Store.YES, Field.Index.ANALYZED);Field f13 = new Field(publishDate, 1970-01-01, Field.Store.YES, Field.Index.NOT_ANALYZED); doc1.add(f11);doc1.add(f1

17、2);doc1.add(f13);Document doc2 = new Document();Field f21 = new Field(bookNumber, 0000002, Field.Store.YES, Field.Index.NOT_ANALYZED);Field f22 = new Field(bookName, 钢铁战士 , Field.Store.YES, Field.Index.ANALYZED);Field f23 = new Field(publishDate, 1970-01-01, Field.Store.YES, Field.Index.NOT_ANALYZED

18、); doc2.add(f21);doc2.add(f22);doc2.add(f23);Document doc3 = new Document();Field f31 = new Field(bookNumber, 0000003, Field.Store.YES, Field.Index.NOT_ANALYZED);Field f32 = new Field(bookName, 篱笆女人和狗 , Field.Store.YES, Field.Index.ANALYZED);ZDOp)4U9LU rD0QPpV9:|!M 9Dop)4U9iu rooQppv9:i!M SDOp)4U9UJ

19、 rD0QPpV9:|!M t7DOp)4U9lU rD0QPpV9:|!M DOp)4U9LU rD0QPpV9:|!M DOp)4U9LU rD0QPpV9:|!M TDop)4U9iu rooQppv9:i!M:(ZJ)PP8-ZDOP:(2Zj)ppe-ZDop :(TZj)ppe-ZDop CEZ人IWNXT丄OKTxepuTPQ!勺刁人90牴卩0=1“S旳LjSHqndJpQ!msu = ZJ ppuaaZAlVNVxspurpisu aASJOSPPU手吐虫M胡逛.siueNooqJpisid M9U =乙o PPUCEZ人IWNXr丄OKTxepuTPQ!aASJOSPPU .

20、ZOOOOOO. .JsqiunNooqJpisid msu = “j ppu U91UrDOQ M9U = ZDOp 4U9LUrooQ:(9j)ppe-9Dop:(29j)ppe-9Dop :(T9j)ppe-9Dop CEZ人IWNXT丄OKTxepuTPQ!勺刁人90牴卩0=1“S旳LjSHqndJpQ!msu = 9J ppuaaZAlVNVxspurpisu sm人90卩1旳“手旺日.siueNooqJpisid msu =乙 ppu CEZ人IWNXr丄OKTxepuTPQ!aASJOSPPU “9000000“ IgqwnNMoqJpQ!msu = igj PPU U91UrD

21、OQ M9U = 9DOP 4U9LUroodgj)pp 咛 op 伽)PP咛op :(Tgj)ppe-gDop CEZ人IWNXT丄OKTxepuTPQ!勺刁人90牴卩0=1“S旳LjSHqndJpQ!msu =ppuaaZAlVNVxspurppu sm人90牴卩1旳“手“钢尝.siueNooqJpisid msu =乙gj ppu CEZ人IWNXr丄OKTxepuTPQ!勺刁人90牴卩|9!=1 店000000“ IgqwnNMoqJpQ!msu =巧j ppu U91UrDOQ M9U = SDOp 4U9LUrooQ亦列)ppp九op f(3J)PP2九 op :(TH)PP8-t

22、7Dop CEZ人IWNXT丄OKTxepuTPQ!勺刁人90牴卩0=1“S旳LjSHqndJpQ!msu = *j ppuaaZAlVNVxspurpisid sm人90牴卩1旳“ iQWENHOoqJpQ!msu =乙列 ppuCEZ人IWNXr丄OKTxepuTPQ!aASJOSPPU 1力000000“ IgqwnNMoqJpQ!msu = “j ppu U91UrDOQ M9U = toop 4U9LUrood:(J)PP8-DOP 血)PP吩op :(Tj)ppe-Dop CEZ人IWNXT丄OKTXBPUTPQ!勺刁人90牴卩0=1“S旳LjSHqndJpQ!msu = j pp

23、u writer.optimize(); writer.close();IndexSearcher searcher = new IndexSearcher(Index);TermQuery q = new TermQuery(new Term(bookName, 女 );ScoreDoc hits = searcher.search(q, null, 1000, Sort.RELEVANCE).scoreDocs; for (int i = 0; i hits.length; i+) Document hitDoc = searcher.doc(hitsi.doc);System.out.p

24、rint( 书名 : ); System.out.println(hitDoc.get(bookName);System.out.print( 得分 : );System.out.println(hitsi.score);System.out.print( 内部 ID : );System.out.println(hitsi.doc);System.out.print( 书号 : ); System.out.println(hitDoc.get(bookNumber);System.out.print( 发行日期 : ); System.out.println(hitDoc.get(publi

25、shDate); catch (Exception e) e.printStackTrace();运行结果:Sort 属性设为 RELEVANCE :名分部号行名分部号行名分部号行名分部号行名分部号行 书得內书发书得内书S书得內书发书得內书发书得内书发英雄儿立NaN0000005口期:1970-01-01 :白毛女:NaNID :0000006朋:1970-01-01 篱笆女人和狗NaNID : 20000003闕:1970-01-01女人是水做的NaNID : 30000004闕:1570-01-01 我的兄弟和女儿NaNID :600000071970-01-01Sort 属性设为 IND

26、EXORDE :名分部号行名分部号行名分部号行名分部号行名分部号行 书得内书发书得内书发书得内书发书得內书发书得内书发篱笆女人和狗NaNID :20000003朋;1970-01-01 立人是水做的NaNID :3000004朋:1970-01-01英雄儿女NaN:1970-01-01白毛女NaNID :5朋:1970-01-01 我的兄弟和女儿NaN00000071970-01-01去除 Sort 参数后:书名:英雄兀女得分:0 S770753 6 氏轴ID ; 4书号:0000005发行日期:1970-01-01 书 :旨毛女得如 057707S3 6 內部ID : 5书号:000000 6 废行日期;1970-01-01 书名:篱笆女人和狗 得分:0 43280652肉部ID : 2书号:0000003发行日期:1970-01-01 书& :女人是水做的 得分:0.43280652 内部ID : 3书号:0000004 发行日期:1970-01-01 书名:我的兄弟和女儿 得分:0 43280652: 6书号;0000007发行日期:1970-01-01

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!