谈谈lucene倒排索引的存储方式(二)

        在谈谈lucene倒排索引的存储方式(一)中只说明了倒排索引位置相关信息的存储,并没有详细说明如果需要对位置信息进行随机访问,那么它的索引该如何设计。lucene采用的是多级跳跃链表的方式,先说说跳跃链表基本思想(其实在前面文中也提过),假设给定一堆排过序的数字,并且数据量很大以至于在内存中放不下,如果要快速随机访问其中的某个数值,一种方法是对这些数字每隔一定的条数如1000条就记录相应的数值以及对应的文件指针,然后把这些数值以及对应的文件指针加载到内存中采用二分查找法找到欲查找数值所在数据块的起始地址,然后将1000条记录依次遍历比较或者加载到内存中采用二分查找都可以,这些数值和文件指针又叫一级跳跃表。

        如果说一级跳跃表的数据量依然很大,那么又要在此基础上再建立一层跳跃表,依此类推就会有多级跳跃表了。值得一提的是级数并不是越多越好,因为层级越多,查找的次数也越多,lucene默认最大层级为10。

d4cb53c44edf251575b0b68c4f78f30396b.jpg

上图是lucene官方给出的示图(一个词代表的倒排位置索引),d代表文档,x代表每隔128个文档进行压缩的文件指针也是第一层级的索引记录了相应的文档ID和所在文件的指针,c分别为第二层级和第三层级。这样感觉在代码实现上较复杂的索引结构确在lucene实现的时候显得非常讨巧,因为总的层级可以预先算出来,然后可以边写边计算出文档所在层级。有兴趣滴还是看代码吧。

转载于:https://my.oschina.net/u/1268334/blog/3072516

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值