lucene4.x收集器之TopScoreDocCollector

TopScoreDocCollector

        TopDocsCollector的子类,根据score和docID排序,在IndexSearcher的search方法内部使用,不需要显示指定,是最常用的收集器。IndexSearcher用它来实现基于TopDocs的查询,命中结果按评分降序并且文档id升序排列。在创建TopScoreDocCollector实例时需要事先了解收集的文档是否需要按文档id排序。Float.NaN和Float.NEGATIVE_INFINITY是无效的分数,收集器不能正确的收集这些分数的命中结果。
        create(int numHits, boolean docsScoredInOrder):创建一个TopScoreDocCollector并指定要收集的命中结果数量和文档是否按通过setScorer(Scorer)方法传入的Scorer进行排序。此方法返回的实例会预先分配一个numHits长度的数组,并用标记对象填充数组。
        create(int numHits, ScoreDoc after, boolean docsScoredInOrder):创建一个TopScoreDocCollector并指定要收集的命中结果数量、前一页最后一个文档和文档是否按通过setScorer(Scorer)方法传入的Scorer进行排序。此方法返回的实例会预先分配一个numHits长度的数组,并用标记对象填充数组。
        newTopDocs(ScoreDoc[] results, int start):创建一个包含查询结果中的最大评分的TopDocs对象。
        TopScoreDocCollector有四个静态私有内部子类,可以通过TopScoreDocCollector的create方法创建。
        由 create(int numHits, boolean docsScoredInOrder)创建:
        InOrderTopScoreDocCollector:假设文档是按文档id升序排列的,而HitQueue在评分相同时取文档id小的,所以在其collect方法中,当文档评分与队列中顶层元素分数相同时,不需要比较文档id直接跳过即可。
        OutOfOrderTopScoreDocCollector:假设文档是无序的,所以在文档评分与队列中顶层元素分数相同时,需要比较文档id,如果文档id较大则跳过。
        由 create(int numHits, ScoreDoc after, boolean docsScoredInOrder)创建:
        InOrderPagingScoreDocCollector:假设文档是按文档id升序排列的。
                collect(int doc):首先与after的评分和文档id比较,若评分小于after的评分,或者评分相同但文档id小于等于after的文档id,则表示文档再前一页查询时已经收集过跳过即可,否则再与队列中的顶层元素比较,与InOrderTopScoreDocCollector一样,评分相同时,不需要比较文档id直接跳过。
                newTopDocs(ScoreDoc[] results, int start):返回最高分为Float.NaN的TopDocs对象。
        OutOfOrderPagingScoreDocCollector:假设文档是无序的。
                collect(int doc):首先与after比较,逻辑与InOrderPagingScoreDocCollector相同,与队列中顶层元素比较的逻辑则与OutOfOrderTopScoreDocCollector相同。
                newTopDocs(ScoreDoc[] results, int start):返回最高分为Float.NaN的TopDocs对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值