欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    针对lucene检索结果进行排序.docx

    • 资源ID:6487421       资源大小:35.47KB        全文页数:9页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    针对lucene检索结果进行排序.docx

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

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

    3、采用以下公式进行计算: 其中wj代表第 j个网页的权值;lij只取 0、 1值,代表从网页 i到网页 j是否存在链接;ni代表网页 i有多少个连向其它网页的链接; d代表随机冲浪中沿着链接访问网页的平均次数。选择合适的初始数值,递归的使用上述公式,即可得到理想的网页权值。 2、 Lucene排序计算公式 Lucene的排序公式如下: 1),协调因子,表示文档( d)中 Term(t)出现的百分比,也就是计算查询条件( q)中不同 Term(t),以及在文档中出现的数量之和,两者的数量之比。通常在文档中出现查询 Term种类越多,分值越高。 2),调节因子,不影响索引排序情况,只在检索时使用,主

    4、要是用来让排序结果在不同的查询条件之间可以比较。这个条件是在搜索时候计算。数值是根据每一个查询项权重的平方和计算得到。计算公式如下: 3),文档频率,表示查询词中,每个 Term在对应的结果文档中 (d)中出现的次数。查询词出现的次数越多,表示出现频率越高,文档的检索得分就越高。为了避免获得更大的相关性函数,实际中,使用次数的平方跟作为文档频率 tf的值,避免数值过度放大。 4),逆文档频率,检索匹配文档数量的反向函数。按照信息理论,文档出现的次数越少,每一篇文档的信息量就会越大。所以匹配的文档数越少,得分就越高。而索引库中文档总数越多,找到一篇目标文档难度越大,相应的信息量也会比较大。 5)

    5、,长度因子,每个索引词汇在域中的总体长度决定的,这个参数在索引建立时确定。数值根据文档中实际具有的索引项个数确定。检索词长度在文档总长度中占的比例越大,长度因子的数值也越大。 Lucene3.0之结果排序(操作篇) 1、 Lucene相关排序流程 2、 Lucene相关类 Query类:一个抽象类, Lucene检索结果最终评分的总控制中心。其它评分有关的类和对象都是由 Query类来管理和生产。 Weight类接口:定义 Query权重计算的一个实现接口,可以被重用。 Weight类可以用来生成 Scorer类,也可以解析评分的详细信息,另外还定义了获取 Query权值的方法。 Scorer

    6、类: Lucene评分机制的核心类。类的定义是抽象类,提供的一些抽象基本的计分功能方法提供所有的评分类实现,同时还定义了评分的详细解析方法, Scorer类内部有一个 Similarity对象,用来指明计算公式。 Scorer类: Lucene相似度计算的核心抽象类。 Similarity类主要处理评分计算,系统缺省使用类 DefaultSimilarity类对象 3、 排序控制 使用 Sort对象定制排序,通过改变文档 Boost值来改变排序结果以及使用自定义的 Similarity方法更改排序 4、 文档 Boost加权排序 Boost是指索引建立过程中,给整篇文档或者文档的某一特定域设定

    7、的权值因子,在检索时,优先返回分数高的。 Document和 Field两重 Boosting参数。通过 Document对象的 setBoost()方法和 Field对象的 setBoost()方法。不同在于前者对文档中每一个域都修改了参数,而后者只针对指定域进行修改。 文档加权 =Document-boosting*Field-boosting,默认情况下为 1,一般不做修改。 Sort对象检索排序 Sort使用时通过实例化对象作为参数,通过 Searcher类的 search接口来实现。 Sort支持的排序功能以文档当中的域为单位,通过这种方法,可以实现一个或者多个不同域的多形式的值排序

    8、。 实际使用排序对象 Sort进行排序。主要有两种模式,一种是以字符串表示文档域的名称作为参数指定域排序,一种是直接以排序域的包装域的包装类作为参数进行排序。 Sort对象使用比较简单,只需要在对文档索引进行检索时,在检索器的 Search方法中带 Sort对象作为参数即可。 1) Sort对象相关性排序 按照相关性排序时最基本的结果排序方法,使用 Sort对象无参数构造函数完成的排序效果相当于 Lucene默认的按相关性降序排序。 2) Sort对象文档编号排序 某些应用场合需要对所有符合匹配度的结果,按照文档内部编号排序输出。使用 Sort对象的静态实例 Sort.INDEXORDER来实

    9、现 3) Sort对象独立域排序 在检索过程中,把检索结果按照某一个特定域排 序,非常重要。在使用搜索引擎过程中,有时会选择使用时间排序,而在搜索引擎库中,检索词完全是另外一个域的内容,与时间没有任何关系。这种应用中,检索 关键词的匹配仍然是首要因素,匹配太低或者不匹配的文档直接不必处理,而匹配的文档则需进一步排序输出。 指定的排序域并没有进行特别限制,可以是检索词的关联域,也可以是文档中的任意其它域。 4) Sort对象联合域排序 多个文档域联合排序时,需要注意文档域的添加次序。排序的结果先按照第一个域排序,然后第二个域作为次要关键字排序。开发时,需要根据自己的需要选择合适的次序。 5) S

    10、ort对象逆向排序 Sort(field,true)或者 Sort(field,false)实现升降序排序。 Lucene3.0之结果排序(示例篇) 这个例子是根据开发自己的搜索引擎: Lucene2.0+Heritrix 中的例子改的,由于原书中是使用 Lucene2.0 ,所以代码有部分改动。 package sortApp; import java.io.File; import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import or

    11、g.apache.lucene.document.Field;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.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 o

    12、rg.apache.lucene.search.TermQuery;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;import org.apache.lucene.util.Version; public class SortTest public static void makeItem(IndexWriter writer, String bookNumber, String bookName, String publishDate) throws Exception

    13、writer.setUseCompoundFile(false); Document doc = new Document(); Field f1 = new Field(bookNumber, bookNumber, 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, F

    14、ield.Index.NOT_ANALYZED); doc.add(f1); doc.add(f2); doc.add(f3); writer.addDocument(doc); public static void main(String 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 S

    15、tandardAnalyzer(Version.LUCENE_CURRENT), true, MaxFieldLength.LIMITED); writer.setUseCompoundFile(false); Document doc1 = 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.ANA

    16、LYZED); Field f13 = new Field(publishDate, 1970-01-01, Field.Store.YES, Field.Index.NOT_ANALYZED); doc1.add(f11); doc1.add(f12); 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, 钢铁战士

    17、, Field.Store.YES, Field.Index.ANALYZED); Field f23 = new Field(publishDate, 1970-01-01, Field.Store.YES, Field.Index.NOT_ANALYZED); 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); Fie

    18、ld f32 = new Field(bookName, 篱笆女人和狗 , Field.Store.YES, Field.Index.ANALYZED); Field f33 = new Field(publishDate, 1970-01-01, Field.Store.YES, Field.Index.NOT_ANALYZED); doc3.add(f31); doc3.add(f32); doc3.add(f33); Document doc4 = new Document(); Field f41 = new Field(bookNumber, 0000004, Field.Store

    19、.YES, Field.Index.NOT_ANALYZED); Field f42 = new Field(bookName, 女人是水做的 , Field.Store.YES, Field.Index.ANALYZED); Field f43 = new Field(publishDate, 1970-01-01, Field.Store.YES, Field.Index.NOT_ANALYZED); doc4.add(f41); doc4.add(f42); doc4.add(f43); Document doc5 = new Document(); Field f51 = new Fi

    20、eld(bookNumber, 0000005, Field.Store.YES, Field.Index.NOT_ANALYZED); Field f52 = new Field(bookName, 英雄儿女 , Field.Store.YES, Field.Index.ANALYZED); Field f53 = new Field(publishDate, 1970-01-01, Field.Store.YES, Field.Index.NOT_ANALYZED); doc5.add(f51); doc5.add(f52); doc5.add(f53); Document doc6 =

    21、new Document(); Field f61 = new Field(bookNumber, 0000006, Field.Store.YES, Field.Index.NOT_ANALYZED); Field f62 = new Field(bookName, 白毛女 , Field.Store.YES, Field.Index.ANALYZED); Field f63 = new Field(publishDate, 1970-01-01, Field.Store.YES, Field.Index.NOT_ANALYZED); doc6.add(f61); doc6.add(f62)

    22、; doc6.add(f63); Document doc7 = new Document(); Field f71 = new Field(bookNumber, 0000007, Field.Store.YES, Field.Index.NOT_ANALYZED); Field f72 = new Field(bookName, 我的兄弟和女儿 , Field.Store.YES, Field.Index.ANALYZED); Field f73 = new Field(publishDate, 1970-01-01, Field.Store.YES, Field.Index.NOT_AN

    23、ALYZED); doc7.add(f71); doc7.add(f72); doc7.add(f73); writer.addDocument(doc1); writer.addDocument(doc2); writer.addDocument(doc3); writer.addDocument(doc4); writer.addDocument(doc5); writer.addDocument(doc6); writer.addDocument(doc7); writer.optimize(); writer.close(); IndexSearcher searcher = new

    24、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.print( 书名 : ); System.out.println(hitDoc.get(bookName); System.

    25、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(publishDate); catch (Exception e) e.printStackTrace(); 运行结果: Sort 属性设为 RELEVANCE : Sort 属性设为 INDEXORDE : 去除 Sort 参数后:


    注意事项

    本文(针对lucene检索结果进行排序.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开