23 lucene学习总结之七:lucene搜索过程解析(8)

23 lucene学习总结之七:lucene搜索过程解析(8)

ID:11724315

大小:111.50 KB

页数:14页

时间:2018-07-13

23 lucene学习总结之七:lucene搜索过程解析(8)_第1页
23 lucene学习总结之七:lucene搜索过程解析(8)_第2页
23 lucene学习总结之七:lucene搜索过程解析(8)_第3页
23 lucene学习总结之七:lucene搜索过程解析(8)_第4页
23 lucene学习总结之七:lucene搜索过程解析(8)_第5页
资源描述:

《23 lucene学习总结之七:lucene搜索过程解析(8)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、2.4、搜索查询对象2.4.4、收集文档结果集合及计算打分在函数IndexSearcher.search(Weight,Filter,int)中,有如下代码:TopScoreDocCollectorcollector=TopScoreDocCollector.create(nDocs,!weight.scoresDocsOutOfOrder());search(weight,filter,collector);returncollector.topDocs();2.4.4.1、创建结果文档收集器TopScoreDocCollectorcollector

2、=TopScoreDocCollector.create(nDocs,!weight.scoresDocsOutOfOrder());publicstaticTopScoreDocCollectorcreate(intnumHits,booleandocsScoredInOrder){ if(docsScoredInOrder){   returnnewInOrderTopScoreDocCollector(numHits); }else{   returnnewOutOfOrderTopScoreDocCollector(numHits); }}其根

3、据是否按照文档号从小到大返回文档而创建InOrderTopScoreDocCollector或者OutOfOrderTopScoreDocCollector,两者的不同在于收集文档的方式不同。2.4.4.2、收集文档号当创建完毕Scorer对象树和SumScorer对象树后,IndexSearcher.search(Weight,Filter,Collector)有以下调用:scorer.score(collector),如下代码所示,其不断的得到合并的倒排表后的文档号,并收集它们。publicvoidscore(Collectorcollector)

4、throwsIOException{ collector.setScorer(this); while((doc=countingSumScorer.nextDoc())!=NO_MORE_DOCS){   collector.collect(doc); }}InOrderTopScoreDocCollector的collect函数如下:publicvoidcollect(intdoc)throwsIOException{ floatscore=scorer.score(); totalHits++; if(score<=pqTop.score){  

5、 return; } pqTop.doc=doc+docBase; pqTop.score=score; pqTop=pq.updateTop();}OutOfOrderTopScoreDocCollector的collect函数如下:publicvoidcollect(intdoc)throwsIOException{ floatscore=scorer.score(); totalHits++; doc+=docBase; if(score

6、

7、(score==pqTop.score&&doc>pqTop.doc)){   r

8、eturn; } pqTop.doc=doc; pqTop.score=score; pqTop=pq.updateTop();}从上面的代码可以看出,collector的作用就是首先计算文档的打分,然后根据打分,将文档放入优先级队列(最小堆)中,最后在优先级队列中取前N篇文档。然而存在一个问题,如果要取10篇文档,而第8,9,10,11,12篇文档的打分都相同,则抛弃那些呢?Lucene的策略是,在文档打分相同的情况下,文档号小的优先。也即8,9,10被保留,11,12被抛弃。由上面的叙述可知,创建collector的时候,根据文档是否将按照文档号从

9、小到大的顺序返回而创建InOrderTopScoreDocCollector或者OutOfOrderTopScoreDocCollector。对于InOrderTopScoreDocCollector,由于文档是按照顺序返回的,后来的文档号肯定大于前面的文档号,因而当score<=pqTop.score的时候,直接抛弃。对于OutOfOrderTopScoreDocCollector,由于文档不是按顺序返回的,因而当score

10、大于,则抛弃,如果小于则入队列。2.4.4.3、打分计算BooleanScorer2的打分函数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。