在swish-e、lucene等搜索引擎中,索引文件有的采用binary格式,对于整数、long等数据类型通常采用压缩算法,再写入到索引文件中。对于其中几种数据类型压缩进行了分析。
整数压缩算法:
在整数前面增加0,形成N*7位的二进制格式;
将整数分割为7位组;
在第一组前增加1,如果还有其余的分组,在其余分组前面都加1,(最后一组除外)。
比如:
Int 135 二进制为10000111,首先添加0,位数达到7的倍数:00000010000111,
然后7位分组,除最后的分组外,其余分组前都加1。
1000001 00000111,然后将分组以byte的方式进行存储。
代码为(修改于swsih-e 2.4.5的压缩算法compress.c):