lucene搜索端uml时序图,lucene源码解析
lucene搜索端uml时序图,lucene源码解析
图比较大,看不清,可以下载【sd-search.svg】后再用浏览器打开
使用starUML画图,可以下载【lucene.mdj】后打开,编辑
只考虑最简单的查询,比如只对一个字段,用一个term去查,即TermQuery;然后索引也只有一个segment,简单的情况利于理解。
以下只描述了几个重要步骤,包含了加权,读取索引文件,收集,评分,分页这几个重要步骤。
1 加权;图中第【2】步,使用query生成weight;query就是查询参数,weight即对查询参数赋予权重,比如查询title包含”lucene”的文章,则首先对”lucene”这个term赋予权重
2 获取匹配的docID集合;以上步骤在生成Weight时,已经从索引文件中读取了倒排表(第【6】步),因此Weight的实例是知道哪些文档匹配这个Query,所以,第【23】步,通过weight实例获取匹配的docID集合
3 基于之前已经算出的【IDF值】,生成计算分数的【Similarity.SimScorer】对象,是的,这个对象就包含了各种公式的计算
4 收集结果;知道了满足查询条件的docID集合,又知道了算分的对象,很明显,就是要【收集】文档,然后为每一个文档【算分】了
5 归并结果,分页返回;已经收集了docID,现在要做的就是分页返回结果了,第【34】步就是归并这些docID,然后返回topN doc