倒排索引优化 - 跳表求交集 空间换时间

简介:

lucene中用的是ConjunctionScorer ,大致过程是每条倒排链不断的推进到小于等于当前最大节点的位置。当然实现细节还是很丰富的,作者很细心的把过程都列出来了,建议顺着读一边。这里摘抄部分:

首先把倒排链按第一个next排序:

    itdadao

查看0~7的倒排链的第一个和最后一个是否相同,不同就开始找;取最后一个倒排的第一个元素8作为终点, 第一个链表开始找8

itdadao

第0个链表 跳过1到了10,那么8也不用找了都去找10就行了

itdadao

第1根链表找到了11,那么10也不用找了,找11,之后都这么做

itdadao......itdadaoitdadao

之后遇到11,本次交集操作找到一个11,

itdadao

  后续的计算也是同理,当然整个代码实现会比较复杂和讨巧。基本思路就是每条倒排链能根据当前文档迅速跳过不符合的docid,由于倒排链可以用skiplist查询,因此即使很长的倒排链,如果交集的数量很少,整个求解过程可以很快跳过不需要比较的节点。

 

摘自:http://www.itdadao.com/articles/c15a1147107p0.html










本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/6589849.html,如需转载请自行联系原作者

相关文章
|
3月前
|
设计模式 算法 Java
【数据结构和算法】找到最高海拔
这是力扣的 1732 题,难度为简单,解题方案有很多种,本文讲解我认为最奇妙的一种。这是一道非常经典的前缀和问题,虽然看似简单,但它却能让你深入理解前缀和的特点。有一个自行车手打算进行一场公路骑行,这条路线总共由n + 1个不同海拔的点组成。自行车手从海拔为0的点0开始骑行。 给你一个长度为n的整数数组gain,其中gain[i]是点i和点i + 1的净海拔高度差(0
82 1
|
4月前
|
存储 算法 搜索推荐
【数据结构】哈希经典应用:布隆过滤器(哈希+位图)——[深度解析](9)
【数据结构】哈希经典应用:布隆过滤器(哈希+位图)——[深度解析](9)
|
3月前
|
存储 设计模式 算法
【数据结构和算法】独一无二的出现次数
这是力扣的 1207 题,难度为简单,解题方案有很多种,本文讲解我认为最奇妙的一种。给你一个整数数组arr,请你帮忙统计数组中每个数的出现次数。 如果每个数的出现次数都是独一无二的,就返回true;否则返回false。
48 1
|
10月前
|
算法
位图算法(空间换时间)
位图算法(空间换时间)
|
11月前
|
SQL 存储 Oracle
前缀索引,在性能和空间中寻找平衡
前缀索引,在性能和空间中寻找平衡
|
SQL 算法 关系型数据库
MySQL索引优化(为排序)
MySQL索引优化(为排序)
68 0
MySQL索引优化(为排序)
|
存储 关系型数据库 索引
Hash索引和B+树索引有什么区别或者说优劣势
Hash索引和B+树索引有什么区别或者说优劣势
393 0
|
存储 SQL 关系型数据库
索引到底能提升多少查询效率?何时该使用索引?一文快速搞懂数据库索引及合理使用它
索引到底能提升多少查询效率?何时该使用索引?一文快速搞懂数据库索引及合理使用它
447 0
索引到底能提升多少查询效率?何时该使用索引?一文快速搞懂数据库索引及合理使用它
|
SQL 存储 缓存
索引不是越多越好,理解索引结构原理,才有助于我们建立合适的索引!
MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引。
589 0
|
SQL 关系型数据库 MySQL
【MySQL优化】避免索引失效的十个关键点,你都知道那些?
【MySQL优化】避免索引失效的十个关键点,你都知道那些?
354 1