Lucene 合并倒排表算法之并集
来源:互联网 发布:sql中select什么意思 编辑:程序博客网 时间:2024/06/05 15:13
上一篇中讲到lucene在合并倒排表时候的交集算法操作.本文继续对倒排表求并集的算法:
lucene处理交集时采用的数据结构是一个倒排表的数组,数组的元素是一个个的迭代器来表现每个倒排表.
而在求并集的时候则是采用了队列数据结构.在DisjunctionSumScorer类的构造函数中对队列进行了初始化操作:
lucene在查询的时候,BooleanScorer2调用nextDoc()会调用DisjunctionSumScorer类中一个非常重要的方法:advanceAfterCurrent()
比较重要的是其中的topNextAndAdjustElsePop()方法,该方法主要完成以下工作:
这段代码找出了队列中最小的元素,并将其置顶,其实就是用了我们常见的堆排序,时间复杂度为O(nlogn),空间复杂度为O(1);当当前文档和队列顶部元素不等时,说明满足该条件的倒排表中的文档已经统计结束,只要该文档出现在所有倒排表中的次数满足最小条件,该文档就是并集的一个元素之一...
当nextDoc()到最后一个doc时,说明并集操作结束
注:因为差集相对简单,不再累述
- Lucene 合并倒排表算法之并集
- Lucene 合并倒排表算法之交集
- 算法之合并算法
- 【算法】并查集——合并与查询
- 算法之合并排序
- Lucene之MaxScorer算法简介
- 算法之分冶法合并算法
- 算法之并查集
- 算法之分冶算法-合并算法
- 分治算法之合并排序
- 排序算法之合并排序
- 排序算法之合并排序
- 算法之3--合并排序
- 排序算法之合并排序
- Lucene学习总结之五:Lucene段合并(merge)过程分析
- Lucene学习总结之五:Lucene段合并(merge)过程分析
- Lucene学习总结之五:Lucene段合并(merge)过程分析
- Lucene学习总结之五:Lucene段合并(merge)过程分析
- C++ socket程序
- Tom大师关于oracle优化的经典法则
- C#(.net)水印图片的生成(上)[转]
- 农村户口的几大好处
- 巧用题注轻松编辑Word 2007长文档
- Lucene 合并倒排表算法之并集
- CSS通过滤镜shadow,glow等实现四个面阴影,效果算不上完美
- ptlib window 下编译
- WinCE中串口通讯的调试方法
- 困
- (离散化 + 线段树) poj 3277 City Horizon
- 后面再整理
- 编译原理-自动机理论总结
- Oracle面试题