`
sharp-fcc
  • 浏览: 106308 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

lucene 存储,访问小技巧

阅读更多

lucene为了能够是信息存储的空间更小,访问速度更快,用了一些小技巧,下面介绍一些技巧:

1.  Prefix + Suffix 

在保存Term Dictionary的时候,会保存几乎所有的词,这样索引文件会非常大,当某个词跟前面一个词拥有相同前缀的时候,后面的词仅仅保存前缀在词中得偏移,以及除了前缀之外的字符串。

比如存储如下几个词: term,  termagancy,  termagant, terminal .

按照正常的方法来存储,需要 4 + 10 + 9 + 8 = 29.

如果使用这个技巧, termagancy 被存储成  [4][a][g][a][n][c][y]  这样算下来一共使用了 4 + 7 + 2 + 5 = 18. 



 

节省了  11 个char 的存储空间。

 

2.  Delta   

在lucene中需要保存很多整型的信息, 比如文档的id, Term的位置信息,当文档渐渐变多的时候,这些数字会越来越大,所占用的Byte也越来越多,Delta的意思就是两个整数,仅仅保存两个整数的差值.

比如:  5  9  11  存储为   5  4   2  

 

3.    markbit

某个值a后面可能存在b,也可能不存在, 需要一个标志位来表示是否存在b。

在lucene 中把a的值左移一位,空出最后一位作为标志位,表示后面是否跟随b,在这种情况下,a/2才是真正的值。

 

4.   skip list

为了提高查询速度,lucene中有很多地方都是用了这种数据结构。

skip list 具有如下的特征:

1.  元素是按书序排列的,比如字母序或者从小到大。

2.  跳跃表是有间隔的,间隔是事先配置好的。

3.  跳跃表是有层次的,每一层指定间隔的元素构成上一层。

lucene中得定义:

间隔: 上层两个元素之差,再加一。

层数: 不包括原来链表层, 上面的层从0来时累加。

跳跃表比顺序查询,大大调高了搜索的效率.



 

比如查找元素72,应用跳表之后只需要访问第一层的50 ,然后发现50后面没有元素,然后访问第二层的94,然后访问原链表,找到72 ,只要访问3个元素即可。

 

  • 大小: 126.3 KB
  • 大小: 11.1 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics