lucene4.x收集器之TopFieldCollector

TopFieldCollector

        TopDocsCollector的子类,通过SortField使用FieldComparator来进行排序,在IndexSearcher的search方法内部使用,需要显示指定。
        create(Sort sort, int numHits,boolean fillFields, boolean trackDocScores, boolean trackMaxScore, boolean docsScoredInOrder):sort为排序的标准;numHits表示要收集的结果数量;fillFields表示是否在结果中返回实际的字段值;trackDocScores表示结果中是否保存文档评分,如果设置为false,则文档评分设置为Float.NaN,如果设置为true,要计算评分会影响,如果不需要用到评分,建议将其设置为false。trackMaxScore表示在TopDocs中是否保存最大评分,如果设置为false,TopDocs.getMaxScore()返回Float.NaN,如果设置为true,会自动将trackDocScores设置为true;docsScoredInOrder表示文档是否是文档id有序的。sort中的进行排序字段数不能为0,且numHits必须大于0,否则会抛出IllegalArgumentException异常。
        create(Sort sort, int numHits,FieldDoc after,boolean fillFields, boolean trackDocScores, boolean trackMaxScore,boolean docsScoredInOrder):只有after之后的命中结果才会被收集。after不为null时,after中的字段不能为null,且字段数量长度应与sort中的排序字段数量一致,否则会抛出IllegalArgumentException异常。
populateResults(ScoreDoc[] results, int howMany):填充返回结果数组,如果fillFields为true,则将字段值添加到返回结果中。
        TopFieldCollector具有13个静态私有内部子类
OneComparatorNonScoringCollector:按单个字段排序,不需要评分。是所有按单个字段排序的收集器的直接或间接父类。
        collect(int doc):在收集文档时,如果队列未满则直接放入文档,如果队列已满则将文档与队列顶部元素进行比较,由于是文档id升序的,所以如果字段比较结果为0,不需要比较文档id直接跳过即可。
OneComparatorScoringNoMaxScoreCollector:按单个字段排序,OneComparatorNonScoringCollector的子类,与其父类唯一不同的就是保存了每个文档的评分。
OneComparatorScoringMaxScoreCollector:按单个字段排序,OneComparatorNonScoringCollector的子类,与其父类不同的就是保存了每个文档的评分和最大的评分。
OutOfOrderOneComparatorNonScoringCollector:按单个字段排序,OneComparatorNonScoringCollector的子类。
        collect(int doc):在收集文档时,如果队列未满则直接放入文档,如果队列已满则将文档与队列顶部元素进行比较,由于文档是是无序的,所以如果字段比较结果为0,则还需比较文档id,保留文档id较小的文档。
OutOfOrderOneComparatorScoringNoMaxScoreCollector:按单个字段排序,OneComparatorScoringNoMaxScoreCollector的子类,与OutOfOrderOneComparatorNonScoringCollector的收集逻辑相同,但保存每个文档的评分。
OutOfOrderOneComparatorScoringMaxScoreCollector:按单个字段排序,OneComparatorScoringMaxScoreCollector的子类,与OutOfOrderOneComparatorNonScoringCollector的收集逻辑相同,但保存每个文档的评分和最大评分。
MultiComparatorNonScoringCollector:按多个字段排序,不需要评分。
        collect(int doc):在收集文档时,如果队列未满则直接放入文档,若队列已满,则与队列顶部元素依次比较每个字段,由于是文档id升序的,所以若最后一次比较值为0则直接跳过即可,不需要比较文档id。
MultiComparatorScoringNoMaxScoreCollector:按多个字段排序,MultiComparatorNonScoringCollector的子类,与其父类唯一不同的就是保存了每个文档的评分。
MultiComparatorScoringMaxScoreCollector:按多个字段排序,MultiComparatorNonScoringCollector的子类,与其父类唯一不同的就是保存了每个文档的评分和最大评分。
OutOfOrderMultiComparatorNonScoringCollector:按多个字段排序,是MultiComparatorNonScoringCollector的子类。
        collect(int doc):在收集文档时,如果队列未满则直接放入文档,如果队列已满则与队列顶部元素依次比较每个字段,由于文档是是无序的,所以若最后一次比较值为0,则还需比较文档id,保留文档id较小的文档。
OutOfOrderMultiComparatorScoringNoMaxScoreCollector:按多个字段排序,MultiComparatorScoringNoMaxScoreCollector的子类,与OutOfOrderMultiComparatorNonScoringCollector的收集逻辑相同,但保存每个文档的评分。
OutOfOrderMultiComparatorScoringMaxScoreCollector:按多个字段排序,是MultiComparatorScoringMaxScoreCollector的子类,与OutOfOrderMultiComparatorNonScoringCollector的收集逻辑相同,但保存每个文档的评分和最大评分。
PagingFieldCollector:当传入TopFieldCollector的create(Sort sort, int numHits,FieldDoc after,boolean fillFields, boolean trackDocScores, boolean trackMaxScore,boolean docsScoredInOrder)的after不为null时,会创建此对象的实例,此时参数docsScoredInOrder无效。
        collect(int doc):1.在收集文档时,将文档与after的每个字段依次进行比较,如果比较值小于0,或者比较值等于0,但文档id小于after的文档id时,则表示文档已被收集过不再收集。2.当trackMaxScore为true时会对评分进行比较,计算最大评分。3.当队列未满时,直接放入队列。当队列已满时,与队列顶部元素每个字段依次进行比较,如果比较值小于0,或者最后一次比较值为0但文档id大于队列顶部元素Id时则跳过。当trackDocScores为true时,如果trackMaxScore也为true,则不会再次调用scorer.score()方法,避免重复计算评分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lucene是一个高性能、可伸缩的信息搜索(IR)库。目前最新版本是4.3.1. 它可以为你的应用程序添加索引和搜索能力。Lucene是用java实现的、成熟的开源项目,是著名的Apache Jakarta大家庭的一员,并且基于Apache软件许可 [ASF, License]。同样,Lucene是当前非常流行的、免费的Java信息搜索(IR)库。 面对已经存在的商业全文检索引擎,Lucene也具有相当的优势 ,后,转移到apache软件基金会后,借助于apache软件基金会的网络平台,程序员可以方便的和开发者、其它程序员交流,促成资源的共享,甚至直接获得已经编写完备的扩充功能。最后,虽然Lucene使用Java语言写成,但是开放源代码社区的程序员正在不懈的将之使用各种传统语言实现(例如.net framework[14]),在遵守Lucene索引文件格式的基础上,使得Lucene能够运行在各种各样的平台上,系统管理员可以根据当前的平台适合的语言来合理的选择。 本课程由浅入深的介绍了Lucene4的发展历史,开发环境搭建,分析lucene4的中文分词原理,深入讲了lucenne4的系统架构,分析lucene4索引实现原理及性能优化,了解关于lucene4的搜索算法优化及利用java结合lucene4实现类百度文库的全文检索功能等相对高端实用的内容,市面上一般很难找到同类具有相同深度与广度的视频,集原理、基础、案例与实战与一身,不可多得的一部高端视频教程。 关健字:Lucene、全文搜索、中文分词、全文检索引擎 、文本分析、网页爬虫、网络小偷

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值