倒排索引优化 - 跳表求交集 空间换时间
2017-03-20 16:13
363 查看
lucene中用的是ConjunctionScorer ,大致过程是每条倒排链不断的推进到小于等于当前最大节点的位置。当然实现细节还是很丰富的,作者很细心的把过程都列出来了,建议顺着读一边。这里摘抄部分:
首先把倒排链按第一个next排序:
![](http://img2016.itdadao.com/d/file/tech/2017/02/13/it299961131644362.png)
查看0~7的倒排链的第一个和最后一个是否相同,不同就开始找;取最后一个倒排的第一个元素8作为终点, 第一个链表开始找8
![](http://img2016.itdadao.com/d/file/tech/2017/02/13/it299961131644363.png)
第0个链表 跳过1到了10,那么8也不用找了都去找10就行了
![](http://img2016.itdadao.com/d/file/tech/2017/02/13/it299961131644364.png)
第1根链表找到了11,那么10也不用找了,找11,之后都这么做
![](http://img2016.itdadao.com/d/file/tech/2017/02/13/it299961131644365.png)
......
![](http://img2016.itdadao.com/d/file/tech/2017/02/13/it299961131644366.png)
![](http://img2016.itdadao.com/d/file/tech/2017/02/13/it299961131644367.png)
之后遇到11,本次交集操作找到一个11,
![](http://img2016.itdadao.com/d/file/tech/2017/02/13/it299961131644368.png)
后续的计算也是同理,当然整个代码实现会比较复杂和讨巧。基本思路就是每条倒排链能根据当前文档迅速跳过不符合的docid,由于倒排链可以用skiplist查询,因此即使很长的倒排链,如果交集的数量很少,整个求解过程可以很快跳过不需要比较的节点。
摘自:http://www.itdadao.com/articles/c15a1147107p0.html
相关文章推荐
- 数据库优化---空间换时间优化
- Java程序时间和空间性能优化Tip
- 剑指offer-5-面试34:丑数(优化时间和空间效率)
- 倒排索引优化 - 跳表求交集 空间换时间 贪心
- 数据库优化---空间换时间优化
- swap实现(优化空间和时间),及其带来的问题
- php取不定个数数组交集、并集(以空间换时间)
- 剑指offer-第五章优化时间和空间效率(把数组排列成最小的数)
- 剑指offer-第五章优化时间和空间效率(从1到n的整数中1出现的次数)
- 关于性能优化之空间时间可靠性的辩证关系思考
- 《剑指offer》 第五章优化时间和空间效率 总结
- 剑指offer-第五章优化时间和空间效率(数组中出现次数超过一半的数字)
- SAP ABAP代码优化(5)之空间换取时间策略
- 性能优化:空间换时间
- 剑指offer-第五章优化时间和空间效率(在字符串中第一次出现切只出现一次的字符)
- 数组最小剑指Offer读书笔记之第五章优化时间空间效率
- 用C++11优化矩阵运算的空间和时间效率
- 剑指offer-第五章优化时间和空间效率(连续子数组的最大和)
- POJ 2049 Finding Nemo BFS 三维数组存状态, 优先队列优化时间与空间
- 剑指offer 第五章 优化时间和空间效率