码迷,mamicode.com
首页 > Web开发 > 详细

Lucene 基础数据压缩处理

时间:2017-09-13 19:28:30      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:mina   png   方式   字典顺序   规则   div   set   com   词典   

Lucene 为了使的信息的存储占用的空间更小,访问速度更快,采取了一些特殊的技巧,然 而在看 Lucene 文件格式的时候,这些技巧却容易使我们感到困惑,所以有必要把这些特殊 的技巧规则提取出来介绍一下。 在下不才,胡乱给这些规则起了一些名字,是为了方便后面应用这些规则的时候能够简单, 不妥之处请大家谅解。

1. 前缀后缀规则(Prefix+Suffix)

Lucene 在反向索引中,要保存词典(Term Dictionary)的信息,所有的词(Term)在词典中是按照 39

字典顺序进行排列的,然而词典中包 了文档中的几乎所有的词,并且有的词还是非常的长 的,这样索引文件会非常的大,所谓前缀后缀规则,即当某个词和前一个词有共同的前缀的 时候,后面的词仅仅保存前缀在词中的偏移(offset),以及除前缀以外的字符串(称为后缀)。

技术分享

比如要存储如下词:term,termagancy,termagant,terminal, 如果按照正常方式来存储,需要的空间如下:

[VInt = 4] [t][e][r][m],[VInt = 10][t][e][r][m][a][g][a][n][c][y],[VInt = 9][t][e][r][m][a][g][a][n][t], [VInt = 8][t][e][r][m][i][n][a][l]
共需要 35 个 Byte.
如果应用前缀后缀规则,需要的空间如下:
[VInt = 4] [t][e][r][m],[VInt = 4 (offset)][VInt = 6][a][g][a][n][c][y],[VInt = 8 (offset)][VInt = 1][t], [VInt = 4(offset)][VInt = 4][i][n][a][l]
共需要 22 个 Byte。 大大缩小了存储空间,尤其是在按字典顺序排序的情况下,前缀的重合率大大提高。 

2. 差值规则(Delta) 

在 Lucene 的反向索引中,需要保存很多整型数字的信息,比如文档 ID 号,比如词(Term)在 文档中的位置等等。
由上面介绍,我们知道,整型数字是以 VInt 的格式存储的。随着数值的增大,每个数字占 用的 Byte 的个数也逐渐的增多。所谓差值规则(Delta)就是先后保存两个整数的时候,后面 的整数仅仅保存和前面整数的差即可。

技术分享

 

比如要存储如下整数:16386,16387,16388,16389 如果按照正常方式来存储,需要的空间如下:

[(1) 000, 0010][(1) 000, 0000][(0) 000, 0001],[(1) 000, 0011][(1) 000, 0000][(0) 000, 0001],[(1) 000, 0100][(1) 000, 0000][(0) 000, 0001],[(1) 000, 0101][(1) 000, 0000][(0) 000, 0001]
供需 12 个 Byte。
如果应用差值规则来存储,需要的空间如下:

[(1) 000, 0010][(1) 000, 0000][(0) 000, 0001],[(0) 000, 0001],[(0) 000, 0001],[(0) 000, 0001] 共需 6 个 Byte。
大大缩小了存储空间,而且无论是文档 ID,还是词在文档中的位置,都是按从小到大的顺 序,逐渐增大的。 

3. 或然跟随规则(A,B?) 

 

 

Lucene 基础数据压缩处理

标签:mina   png   方式   字典顺序   规则   div   set   com   词典   

原文地址:http://www.cnblogs.com/wangmh/p/7516368.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!